SWI Prolog允许在顶层之前执行一个非零度的目标,如下所示

swipl -s consultingfile.pl -g start

但是,当一个非零的谓词被指定为
swipl -s consultingfile.pl -g start(1)

它会出错
syntax error near unexpected token '('

在顶级之前,应该如何传递非零arity谓词作为目标?

最佳答案

我认为这与SWI-prolog本身无关,而更多的是与命令行处理程序有关。
如果我将目标放在单引号('')之间,则它有效:

swipl -s consultingfile.pl -g 'start(1)'

括号可能被shell错误地解释了。
如果我使用你的命令,它会:
$ swipl -s consultingfile.pl -g start(1)
bash: syntax error near unexpected token `('

但要注意结肠前的bash。这意味着控制权从未真正交给swipl,正是bash抱怨方括号。
一般来说,最好将项目放入引号中,以便将内容作为单个参数分组。

10-06 10:48