gpt4 book ai didi

lisp - 从终端命令提示符运行 Common Lisp 函数

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:34 24 4
gpt4 key购买 nike

我很难找到这个问题的答案,所以也许这是不可能的。我想要能够从命令行加载/编译 lisp 文件的灵 active ,即不在 emacs 内部,然后还从命令行运行该文件中的 lisp 函数之一。毫无疑问,这是特定于实现的功能,因此任何关于提供此功能的实现的指针(或者它可能是相当标准的,我不知道)。我正在使用 SBCL 并且喜欢它,所以如果它能做到这一点就太好了。

此外,我还在使用 Mac OSX 和终端。

最佳答案

SBCL 手册描述了三个有用的选项

3.3.1 Runtime Options

--noinform
Suppress the printing of any banner or other informational message at startup. This makes it easier to write Lisp programs which work cleanly in Unix pipelines. See also the --noprint and --disable-debugger options.

3.3.2 Toplevel Options

--eval command
After executing any initialization file, but before starting the read-eval-print loop on standard input, read and evaluate the command given. More than one --eval option can be used, and all will be read and executed, in the order they appear on the command line.

--load filename
This is equivalent to --eval '(load "filename")'. The special syntax is intended to reduce quoting headaches when invoking SBCL from shell scripts.

给定一个包含内容的文件 test.lisp

(defun hello-world ()
(print 'hello-world)
(terpri))

我们可以用 SBCL 做到这一点:

$ sbcl --noinform --load test.lisp --eval '(progn (hello-world) (sb-ext:quit))'

HELLO-WORLD

(progn ... (sb-ext:quit)) 确保程序在执行 (hello-world) 后结束。否则您将进入 SBCL 提示符。由于代码在 SBCL 中自动编译,您正在运行的函数在 (hello-world) 运行时已经编译。如果你提前编译过文件,你可以将编译后的文件传递给--load。例如,

$ sbcl --noinform --load test.fasl --eval '(hello-world)'

HELLO-WORLD

事实上,考虑到 --load--eval (load "filename") 的等价性,您可以只使用文件名的基数,并且如果有编译版本,那么 SBCL 应该加载它,如果没有,那么 SBCL 将加载源文件,你将以这种方式获得编译代码。例如,在下面,我们只使用 --load test:

$ sbcl --noinform --load test --eval '(hello-world)'

HELLO-WORLD

关于lisp - 从终端命令提示符运行 Common Lisp 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20301668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com