Lisp 只需执行一个lsp文件并获取一个日志文件

Lisp 只需执行一个lsp文件并获取一个日志文件,lisp,common-lisp,logfile,clisp,Lisp,Common Lisp,Logfile,Clisp,对于一个项目,我需要一个Lisp程序的输出,但是我从来没有听说过Lisp,我无法使它运行。我从一个网站下载了这个文件(.lsp),并用文本编辑器查看它以了解其逻辑。lisp文件获得特定的输入,并通过一些迭代步骤减少该输入。我不仅想知道输出,还想知道迭代过程,这就是为什么要有一个这样的日志文件。我已经下载了Portacle和其他一些Lisp解释器/编译器,但无法使其正常工作。这太令人沮丧了。有没有一种从目录运行lisp文件的简单方法?我已经看了一些教程,并在这里读了一些文章,但我仍然不知道如何像运

对于一个项目,我需要一个Lisp程序的输出,但是我从来没有听说过Lisp,我无法使它运行。我从一个网站下载了这个文件(.lsp),并用文本编辑器查看它以了解其逻辑。lisp文件获得特定的输入,并通过一些迭代步骤减少该输入。我不仅想知道输出,还想知道迭代过程,这就是为什么要有一个这样的日志文件。我已经下载了Portacle和其他一些Lisp解释器/编译器,但无法使其正常工作。这太令人沮丧了。有没有一种从目录运行lisp文件的简单方法?我已经看了一些教程,并在这里读了一些文章,但我仍然不知道如何像运行Python文件一样运行Lisp文件

我非常感谢您的帮助!我很确定有一个简单的方法我就是看不到。
提前非常感谢

如果您必须花一些时间来完成此项工作,请按照本教程安装至少Quicklisp和Slime:

但是,您只能从解释器开始。您需要安装
sbcl
,我建议您也安装
rlwrap
,因为sbcl提示符没有花哨的readline功能

$ rlwrap sbcl
然后,您将处于Lisp REPL中。执行此操作以确保以最大调试级别编译代码:

* (sb-ext:restrict-compiler-policy 'debug 3)
环境应回答:

((DEBUG . 3))
NIL
然后,您可以编译您的输入文件(使用绝对路径,或相对于您创建sbcl的目录的路径):

将发出大量文本,但解释器会用生成的目标文件的名称(例如“/tmp/concepts.fasl”)进行回复,您可以通过提供
*
作为参数来加载它,因为星号表示最后的结果

根据文件中的注释(介于
|
|#
之间),您可以按如下方式对其进行测试:

* (test-concepts shepard)
这会执行很多测试

如果需要,可以使用
(trace X Y Z)
跟踪单个函数,其中
X
Y
Z
是函数名(也可以
取消跟踪它们)。
为了简化,这里列出了注释中描述的所有(我认为)符号:

(trace frequency-of-properties
       frequency-of-pairs
       count-of-n
       simplify-eight
       remove-non-minimals
       replace-lis-in-concept
       print-linear-models
       simplify-quads
       make-master-list
       make-pairs-for-quads
       find-pair-quads
       memberprop-lis
       max-length
       count-of-n
       frequency-of-pairs
       find-pairs-that-simplify
       find-pair-to-simplify
       remove-non-minimals
       triples 
       three-pairs 
       simplify-by-mates
       doubles
       co
       remove-non-minimals
       replace-lis-in-concept
       simplify-by-mates
       singles
       remove-non-minimals
       replace-lis-in-concept
       simplify-by-mates
       print-linear-models
       simplify-by-mates)
使用与上述相同的测试,最后一个测试打印以下跟踪:

Problem 6   0: (PRINT-LINEAR-MODELS (((A) (B) (- C)) ((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))))
AB-C A-BC -ABC -A-B-C 
  0: PRINT-LINEAR-MODELS returned NIL

  0: (FREQUENCY-OF-PROPERTIES (((A) (B) (- C)) ((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))))
  0: FREQUENCY-OF-PROPERTIES returned
       ((((A)) 2) (((B)) 2) (((- C)) 2) (((- B)) 2) (((C)) 2) (((- A)) 2))
  0: (COUNT-OF-N ((((A)) 2) (((B)) 2) (((- C)) 2) (((- B)) 2) (((C)) 2) (((- A)) 2)) 4)
    1: (COUNT-OF-N ((((B)) 2) (((- C)) 2) (((- B)) 2) (((C)) 2) (((- A)) 2)) 4)
      2: (COUNT-OF-N ((((- C)) 2) (((- B)) 2) (((C)) 2) (((- A)) 2)) 4)
        3: (COUNT-OF-N ((((- B)) 2) (((C)) 2) (((- A)) 2)) 4)
          4: (COUNT-OF-N ((((C)) 2) (((- A)) 2)) 4)
            5: (COUNT-OF-N ((((- A)) 2)) 4)
              6: (COUNT-OF-N NIL 4)
              6: COUNT-OF-N returned NIL
            5: COUNT-OF-N returned NIL
          4: COUNT-OF-N returned NIL
        3: COUNT-OF-N returned NIL
      2: COUNT-OF-N returned NIL
    1: COUNT-OF-N returned NIL
  0: COUNT-OF-N returned NIL
  0: (SIMPLIFY-BY-MATES (((A) (B) (- C)) ((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))))
    1: (MAX-LENGTH (((A) (B) (- C)) ((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))))
      2: (MAX-LENGTH (((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))) 3)
        3: (MAX-LENGTH (((- A) (B) (C)) ((- A) (- B) (- C))) 3)
          4: (MAX-LENGTH (((- A) (- B) (- C))) 3)
            5: (MAX-LENGTH NIL 3)
            5: MAX-LENGTH returned 3
          4: MAX-LENGTH returned 3
        3: MAX-LENGTH returned 3
      2: MAX-LENGTH returned 3
    1: MAX-LENGTH returned 3
  0: SIMPLIFY-BY-MATES returned NIL
No simplification possible.  Number of models 4
这应该能更好地理解正在发生的事情。
您还可以使用
(步骤(test shepard))
,在这种情况下,调试器中的执行中断;使用
help
了解有关可以调用的命令的更多信息。例如,您可以编写
STEP
(或只写
S
)以单步进入表达式,
NEXT
跳过表达式并转到下一个表达式,
OUT
以跳出当前帧,等等。

如果您必须花一些时间来处理此问题,至少值得安装Quicklisp和Slime,遵循本教程:

但是,您只能从解释器开始。您需要安装
sbcl
,我建议您也安装
rlwrap
,因为sbcl提示符没有花哨的readline功能

$ rlwrap sbcl
然后,您将处于Lisp REPL中。执行此操作以确保以最大调试级别编译代码:

* (sb-ext:restrict-compiler-policy 'debug 3)
环境应回答:

((DEBUG . 3))
NIL
然后,您可以编译您的输入文件(使用绝对路径,或相对于您创建sbcl的目录的路径):

将发出大量文本,但解释器会用生成的目标文件的名称(例如“/tmp/concepts.fasl”)进行回复,您可以通过提供
*
作为参数来加载它,因为星号表示最后的结果

根据文件中的注释(介于
|
|#
之间),您可以按如下方式对其进行测试:

* (test-concepts shepard)
这会执行很多测试

如果需要,可以使用
(trace X Y Z)
跟踪单个函数,其中
X
Y
Z
是函数名(也可以
取消跟踪它们)。
为了简化,这里列出了注释中描述的所有(我认为)符号:

(trace frequency-of-properties
       frequency-of-pairs
       count-of-n
       simplify-eight
       remove-non-minimals
       replace-lis-in-concept
       print-linear-models
       simplify-quads
       make-master-list
       make-pairs-for-quads
       find-pair-quads
       memberprop-lis
       max-length
       count-of-n
       frequency-of-pairs
       find-pairs-that-simplify
       find-pair-to-simplify
       remove-non-minimals
       triples 
       three-pairs 
       simplify-by-mates
       doubles
       co
       remove-non-minimals
       replace-lis-in-concept
       simplify-by-mates
       singles
       remove-non-minimals
       replace-lis-in-concept
       simplify-by-mates
       print-linear-models
       simplify-by-mates)
使用与上述相同的测试,最后一个测试打印以下跟踪:

Problem 6   0: (PRINT-LINEAR-MODELS (((A) (B) (- C)) ((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))))
AB-C A-BC -ABC -A-B-C 
  0: PRINT-LINEAR-MODELS returned NIL

  0: (FREQUENCY-OF-PROPERTIES (((A) (B) (- C)) ((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))))
  0: FREQUENCY-OF-PROPERTIES returned
       ((((A)) 2) (((B)) 2) (((- C)) 2) (((- B)) 2) (((C)) 2) (((- A)) 2))
  0: (COUNT-OF-N ((((A)) 2) (((B)) 2) (((- C)) 2) (((- B)) 2) (((C)) 2) (((- A)) 2)) 4)
    1: (COUNT-OF-N ((((B)) 2) (((- C)) 2) (((- B)) 2) (((C)) 2) (((- A)) 2)) 4)
      2: (COUNT-OF-N ((((- C)) 2) (((- B)) 2) (((C)) 2) (((- A)) 2)) 4)
        3: (COUNT-OF-N ((((- B)) 2) (((C)) 2) (((- A)) 2)) 4)
          4: (COUNT-OF-N ((((C)) 2) (((- A)) 2)) 4)
            5: (COUNT-OF-N ((((- A)) 2)) 4)
              6: (COUNT-OF-N NIL 4)
              6: COUNT-OF-N returned NIL
            5: COUNT-OF-N returned NIL
          4: COUNT-OF-N returned NIL
        3: COUNT-OF-N returned NIL
      2: COUNT-OF-N returned NIL
    1: COUNT-OF-N returned NIL
  0: COUNT-OF-N returned NIL
  0: (SIMPLIFY-BY-MATES (((A) (B) (- C)) ((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))))
    1: (MAX-LENGTH (((A) (B) (- C)) ((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))))
      2: (MAX-LENGTH (((A) (- B) (C)) ((- A) (B) (C)) ((- A) (- B) (- C))) 3)
        3: (MAX-LENGTH (((- A) (B) (C)) ((- A) (- B) (- C))) 3)
          4: (MAX-LENGTH (((- A) (- B) (- C))) 3)
            5: (MAX-LENGTH NIL 3)
            5: MAX-LENGTH returned 3
          4: MAX-LENGTH returned 3
        3: MAX-LENGTH returned 3
      2: MAX-LENGTH returned 3
    1: MAX-LENGTH returned 3
  0: SIMPLIFY-BY-MATES returned NIL
No simplification possible.  Number of models 4
这应该能更好地理解正在发生的事情。
您还可以使用
(步骤(test shepard))
,在这种情况下,调试器中的执行中断;使用
help
了解有关可以调用的命令的更多信息。例如,您可以编写
STEP
(或只写
S
)以单步执行表达式,
NEXT
跳过表达式并转到下一个表达式,
OUT
以跳出当前帧,等等。

我建议您在操作系统上安装sbcl,并检查其文档以运行脚本。如果我没记错的话,这里有你需要的所有信息。Portacle是一个完整的IDE,它包含sbcl,但对于您的任务来说可能太多了。如果不知道程序是什么,这很难回答。Lisp是一个完整的语言家族,即使是家族中的一员,其代码的编写方式也可能不适合从操作系统命令行运行(因为Lisp通常是对话语言,所以许多程序都是从Lisp内部运行的)。非常感谢!说实话,便携设备确实让我有点不知所措。这是我正在使用的lisp程序,我设法用在线编译器运行了它。然而,我想知道是否有可能得到一个日志文件,因为代码没有任何日志命令。我需要添加一些东西吗?或者我可以只记录程序的迭代步骤吗?这段代码的风格对我来说很有问题,对学习没有太大帮助。此外,程序的(所有?)输出似乎都作为注释附加在文件的下面,因此您可能不需要自己运行它。我建议您在操作系统上安装sbcl,并检查其运行脚本的文档。如果我记得corre