小编Lil*_*ung的帖子

"Qed"和"Defined"有什么区别?

在交互式定理证明器Coq的,任何交互证明或定义可与被终止QedDefined.有一些"不透明"的概念Qed强制执行但Defined不强制执行.例如,Adam Chlipala 撰写的" 依赖类型认证编程 "一书指出:

我们用" Defined而不是"结束"证据" Qed,以便我们构建的定义仍然可见.这与结束证明的情况形成对比Qed,其中证据的细节随后被隐藏.(更正式地,Defined将标识符标记为透明,允许它展开;同时Qed将标识符标记为不透明,防止展开.)

但是,我不太确定这在实践中意味着什么.有一个后来的例子,Defined由于需要Fix检查某个证据的结构,有必要使用,但我不明白这个"检查"的确切含义,或者为什么如果Qed使用它会失败.(看看定义Fix也不完全具有启发性).

从表面上看,很难说Qed实际上在做什么.例如,如果我写:

Definition x : bool.
exact false.
Qed.
Run Code Online (Sandbox Code Playgroud)

我仍然可以x通过执行命令看到值.Print x. 此外,我以后允许在"不透明"值上进行模式匹配x:

Definition not_x : bool :=
  match x with
    | true => false
    | false => true
  end.
Run Code Online (Sandbox Code Playgroud)

因此,我似乎能够使用正常的价值x.Chlipala教授在这里"展开"是什么意思?不透明和透明差异究竟有什么区别?最重要的是,这有什么特别之处Fix …

scope coq

11
推荐指数
1
解决办法
592
查看次数

在打开括号后配置python悬挂缩进

Emacs缩进我的代码,如下所示:

def my_function(
    a, b, c):
    pass

if my_function(
    1, 2, 3):
    pass
Run Code Online (Sandbox Code Playgroud)

但是,PEP8声明它应该像这样缩进,以避免将挂起的缩进与下一行混淆:

def my_function(
        a, b, c):
    pass

if my_function(
        1, 2, 3):
    pass
Run Code Online (Sandbox Code Playgroud)

如何在这种情况下(在左括号和换行符之后)配置emacs'old python.el以使用现有python-continuation-offset变量,以便缩进第二种方式?

emacs indentation

10
推荐指数
1
解决办法
633
查看次数

java.io.IOException:无法运行程序错误= 2,没有这样的文件或目录

我有一个java类,我在其中调用runhellscript方法来执行脚本.它与mysql一起工作得很好,但我似乎无法找出为什么它不能与psql很好地工作.这是我的runhell方法的摘录:

public class RunShellScript {

public static void runShellScript (String unixCommand) 
{
 try {
     Runtime runtime=Runtime.getRuntime();
     //Process process=runtime.exec(new String [] { "/bin/csh", "-c", unixCommand});
     Process process=runtime.exec(new String [] {unixCommand});
     InputStream stderr=process.getErrorStream();
     InputStreamReader isr=new InputStreamReader (stderr);
     BufferedReader br=new BufferedReader (isr);
     String line=null;
     System.out.println("<ERROR>");

     while((line=br.readLine())!=null)
         System.out.println(line);

     System.out.println(line);
     int exitVal=process.waitFor();
     System.out.println("Process exitValue:" + exitVal);
 }
 catch (Throwable t)
 {
     t.printStackTrace();
 }
Run Code Online (Sandbox Code Playgroud)

问题是,当我把它放在鼠标点击事件后面时,它说命令未找到.这是代码beuind the mous事件

private void jMenuItem13MousePressed(java.awt.event.MouseEvent evt)    {                                         

    String shellCommand="vobs/tools/Scripts/DataValidation/mysqlconnection.csh";
    RunShellScript.runShellScript(shellCommand);
    // TODO add your handling code here:
}                     
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我直接进入脚本所在的目录并输入./mysqlconnection时,脚本可以工作.但是,当我只是键入mysqlconnection时,说找不到命令.不知怎的,它没有将我的脚本名称识别为命令?

csh exec

9
推荐指数
1
解决办法
3万
查看次数

可扩展的宏定义

受关于函数而不是宏的相关问题的评论主题的启发.

有没有办法扩展Scheme语法定义,以便它可以使用新定义中语法的先前定义?此外,这必须是可扩展的,也就是说,必须能够将技术链接在一起几次.

例如,假设我们想要扩展,lambda以便每次调用定义的函数时lambda,它在执行函数体之前打印"foo".我们可以通过以下方式执行此操作:

(define-syntax old-lambda lambda)

(define-syntax lambda
  (syntax-rules ()
    ((_ args body ...)
     (old-lambda args (display "foo") body ...))))
Run Code Online (Sandbox Code Playgroud)

我们还可以通过以下方式以另一种方式扩展它(例如,通过打印"bar"):

(define-syntax old-lambda-2 lambda)

(define-syntax lambda
  (syntax-rules ()
    ((_ args body ...)
     (old-lambda-2 args (display "bar") body ...))))
Run Code Online (Sandbox Code Playgroud)

最终结果是使用new定义的函数lambda将打印"foo",然后每次调用它们时都会显示"bar".

但是,除了用大量的方法来污染命名空间之外old-lambda-<x>,old-lambda-<x>每次我们这样做时都需要在源代码级别创建一个新的; 这不能自动化,因为您也不能gensym在语法定义中使用.因此,没有好的方法可以实现这种可扩展性; 唯一可行的解​​决方案是命名每个old-lambda-print-foo或类似的消歧,这显然不是一个万无一失的解决方案.(有关这可能失败的示例,请说代码的两个不同部分是扩展lambda为打印"foo";当然,它们都会命名它old-lambda-print-foo,瞧!lambda现在是无限循环.)因此,它会非常很高兴,如果我们能够以理想的方式做到这一点:

  • 不需要我们用大量的污染命名空间 old-lambda-<x>
  • 或者,如果失败,保证我们不会发生碰撞.

macros inheritance scheme r5rs

8
推荐指数
1
解决办法
125
查看次数

是否可以在方案中编写控制台应用程序?

有没有人知道在计划中编写控制台应用程序(例如基本动画)的任何半便携方式?我听说过一个ncurses包装,但我找不到任何东西.

console scheme

5
推荐指数
1
解决办法
745
查看次数

Letrec和reentrant延续

我被告知以下表达式旨在评估为0,但Scheme的许多实现将其评估为1:

(let ((cont #f))
  (letrec ((x (call-with-current-continuation (lambda (c) (set! cont c) 0)))
           (y (call-with-current-continuation (lambda (c) (set! cont c) 0))))
    (if cont
        (let ((c cont))
          (set! cont #f)
          (set! x 1)
          (set! y 1)
          (c 0))
        (+ x y))))
Run Code Online (Sandbox Code Playgroud)

我必须承认,我不知道从哪里开始.我理解延续的基础知识call/cc,但是我可以得到这个表达式的详细解释吗?

scheme continuations letrec

5
推荐指数
1
解决办法
301
查看次数

延续传递风格使事物尾递归?

在这里问它很痛.确实如此.每次我徒劳地寻找我的烦恼的答案,我都会看到它.嘲弄我.堆栈溢出.

无论如何,一些地狱般的影响使我试图解决河内塔.我的第一个解决方案是不完整的,因为如果运行太多磁盘会导致内存错误:

(define hanoi
  (lambda (n from to other)
    (cond ((< n 0)
       (error `(Error! Number of disks ,n cannot be less than 0!)))
      ((= n 0)
       '())
      (else
       (append (hanoi (- n 1)
              from
              other
              to)
           `((,from ,to))
           (hanoi (- n 1)
              other
              to
              from))))))
Run Code Online (Sandbox Code Playgroud)

我在某处读到延续传递方式可以解决问题.但是,这也无济于事:

(define hanoi_cps
  (lambda (n from to other c)
    (cond ((< n 0)
       (error `(Error! Number of disks ,n cannot be less than 0!)))
      ((= n 0)
       (c …
Run Code Online (Sandbox Code Playgroud)

recursion scheme tail-recursion towers-of-hanoi

4
推荐指数
1
解决办法
3052
查看次数

使用apache commons编解码器的Base64解码在非常大的二进制文件上失败

我正在开发加密工具,对于我们的加密文件格式,我使用Base64来编码数据.我正在使用apache commons编解码器使用围绕FileInputStream的Base64InputStream来解码文件.在我在大型音乐文件上测试之前,这就像一个魅力.出于一些神秘的原因,当我这样做时,字节6028之后的每个字节变为0.将其读入byte []的代码如下:

FileInputStream filein = new FileInputStream(filename);
Base64InputStream in = new Base64InputStream(filein,false,76,'\n');
byte[] contents = new byte[known_and_tested_correct_filelength];
in.read(contents);
Run Code Online (Sandbox Code Playgroud)

现在,无论出于何种原因,在字节6028之后,所有内容contents都是0.但是,contents.length大约是300,000字节.你可以猜到,这对我的应用程序来说确实很奇怪.有没有人知道发生了什么?

java base64 fileinputstream apache-commons-codec

3
推荐指数
1
解决办法
848
查看次数

顶级功能私下共享范围

在方案中,可以使用set!创建两个(或更多)函数,它们之间共享一个私有范围:

(define f1 #f) ; or any other "undefined" value
(define f2 #f)

(let ((private some-value) (another-private some-other-value))
  (set! f1 (lambda ... <use of private variables> ...))
  (set! f2 (lambda ... <use of private variables> ...)))
Run Code Online (Sandbox Code Playgroud)

或者使用第三个变量:

(define functions
  (let ((private some-value) (another-private some-other-value))
    (list (lambda ... <use of private variables> ...)
          (lambda ... <use of private variables> ...))))

(define f1 (car functions))
(define f2 (cadr functions))
Run Code Online (Sandbox Code Playgroud)

然而,由于在第二个中使用set!了第一个和剩下的变量functions,所以这两个看起来都不优雅.有没有办法做到这一点没有?

scheme functional-programming

3
推荐指数
1
解决办法
121
查看次数

Postgres json_agg 排序依据

我在json_aggfor中有多个表psql

SELECT json_agg(t) FROM (SELECT *, 
    ( SELECT row_to_json(b) FROM ( SELECT * from (SELECT *, ( (3959 * acos( cos( radians(6.414478) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(12.466646) ) + sin( radians(6.414478) ) * sin( radians( lat ) ) ) ) * 1.609344 ) AS distance
    from farm_location ) al WHERE farm_location_id=supply_forecast.farm_location_id and distance < 100 ) b) as farm_location, 
    ( SELECT json_agg(c) FROM ( SELECT * 
    FROM …
Run Code Online (Sandbox Code Playgroud)

postgresql psql

1
推荐指数
1
解决办法
3188
查看次数