【问题标题】:Simply execute a lsp file and get a log file只需执行一个 lsp 文件并获取一个日志文件
【发布时间】:2023-03-16 08:35:01
【问题描述】:

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

我非常感谢任何帮助!我很确定有一种我没有看到的简单方法。 提前非常感谢您!

【问题讨论】:

  • 我建议您在您的操作系统上安装 sbcl 并查看其文档以运行脚本。如果我没记错的话,这里有你需要的所有信息。 Portacle 是一个完整的 IDE,其中包括 sbcl,但对于您的任务来说可能太多了。
  • 如果不知道程序是什么,这很难回答。 Lisp 是一个完整的语言家族,即使是该家族的一个成员的代码也可能会或可能不会以某种方式编写,以便可以从 OS 命令行有效地运行(因为 Lisp 通常是会话语言,所以很多程序被编写为在 Lisp 中运行)。
  • 非常感谢!老实说,Portacle 确实让我有点不知所措。这是我正在使用的 lisp 程序modeltheory.org/programs/BooleanConcepts.lisp,我设法使用在线编译器运行。但是,我想知道是否甚至可以获得日志文件,因为代码没有任何日志记录命令。我需要添加一些东西还是只记录程序的迭代步骤?
  • 这段代码的风格对我来说似乎很可疑,对学习没有太大帮助。此外,程序的(所有?)输出似乎都作为 cmets 附加在文件的下方,因此您可能不需要自己运行它。

标签: lisp common-lisp logfile clisp


【解决方案1】:

如果你必须花一些时间来解决这个问题,那么至少值得安装 Quicklisp 和 Slime,遵循本教程:

https://lisp-lang.org/learn/getting-started/

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

$ rlwrap sbcl

然后,您将进入 Lisp REPL。执行此操作以确保以最高级别的调试编译代码:

* (sb-ext:restrict-compiler-policy 'debug 3)

环境应回复:

((DEBUG . 3))
NIL

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

* (compile-file "/tmp/concepts")

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

* (load *)

按照文件中的cmets(在#||#之间),可以如下测试:

* (test-concepts shepard)

这会执行大量测试。

如果需要,您可以使用(trace X Y Z) 跟踪各个函数,其中X YZ 是函数名称(您也可以使用untrace 它们)。 为简化起见,这是一个列表,其中包含了 cmets 中描述的所有(我认为)符号:

(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

这应该可以更好地了解正在发生的事情。 您也可以使用(step (test shepard)),在这种情况下,调试器会中断执行;使用help 获取有关您可以调用的命令的更多信息。例如,您可以写STEP(或只写S)进入一个表达式,NEXT 跳过一个表达式并转到下一个,OUT 退出当前帧,等等。

【讨论】:

    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多