gpt4 book ai didi

shell - 如何从命令行运行SWI-Prolog?

转载 作者:行者123 更新时间:2023-12-03 02:30:26 24 4
gpt4 key购买 nike

有没有办法像这样创建一个名为 hello.pl 的 prolog 脚本:

#!/usr/local/bin/swipl -q -s -t main

main:-
write('Hello World\n').

并且能够像这样从终端运行它吗?

$ hello.pl
Hello World
$

当我这样做时,它会给我这个:

hello.pl: line 3: main:-: command not found
hello.pl: line 4: syntax error near unexpected token `'Hello World\n''
hello.pl: line 4: ` write('Hello World\n').'

我可以通过在命令行上编写以下内容来使其工作:

$ swipl -q -f hello.pl -t main
Hello World
$

但是有没有办法将直接脚本作为可执行文件运行?

编辑

目前还无法让它发挥作用。以下是@Boris 在其答案的评论中询问的命令的输出:

$ ls -l
total 8
-rwxr-xr-x 1 viatropos staff 235 Aug 26 20:28 example.pl
$ cat example.pl
#!/usr/local/bin/swipl

:- set_prolog_flag(verbose, silent).

:- initialization main.

main :-
format('Example script~n'),
current_prolog_flag(argv, Argv),
format('Called with ~q~n', [Argv]),
halt.
main :-
halt(1).
$ which swipl
/usr/local/bin/swipl
$ swipl --version
SWI-Prolog version 6.6.6 for x86_64-darwin13.1.0
$ ./example.pl
./example.pl: line 3: syntax error near unexpected token `('
./example.pl: line 3: `:- set_prolog_flag(verbose, silent).'
$

我使用的是 Mac OSX 10.9.2,并通过 brew install swi-prolog --with-libarchive 使用 homebrew 安装了 swipl

最佳答案

ISO 指令:initialization 。这应该可行。

:- initialization main.

main :-
write('Hello World\n').

编辑抱歉,我跳过了最有趣的细节。这是一个示例脚本,假设保存在 ~/test/main.pl

#!/home/carlo/bin/swipl -f -q

:- initialization main.

main :-
current_prolog_flag(argv, Argv),
format('Hello World, argv:~w\n', [Argv]),
halt(0).

并使其可执行

chmod +x ~/test/main.pl

然后我明白了

~$ ~/test/main.pl
Hello World, argv:[]

~$ ~/test/main.pl as,dnj asdl
Hello World, argv:[as,dnj,asdl]

在脚本 main.pl 中,我使用了 swipl 路径,该路径是在没有管理员权限的情况下从源代码构建得到的。 SWI-Prolog 构建过程将 bin 和 lib 放在 ~/bin 和 ~/lib 下

注意:-f 标志禁用加载初始化 ~/.plrc,这可能是对执行进行更多“严格控制”所必需的...

我目前不确定文档页面是否与当前软件状态保持同步。来自 some mailing list message ,以及我自己的努力再利用thea ,似乎命令行标志最近发生了变化...

关于shell - 如何从命令行运行SWI-Prolog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25467090/

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