SWI Prolog通过命令行参数传递非零arity的目标

ant*_*618 4 bash prolog logic-programming swi-prolog

SWI Prolog允许在非最低级别的顶级之前执行目标,如下所示

swipl -s consultingfile.pl -g start
Run Code Online (Sandbox Code Playgroud)

但是,当具有非零arity的谓词指定如下时

swipl -s consultingfile.pl -g start(1)
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误

syntax error near unexpected token '('
Run Code Online (Sandbox Code Playgroud)

如何将非零arity谓词作为最高级别之前的目标传递?

Wil*_*sem 6

我认为这与SWI-prolog本身没什么关系,但与命令行处理程序有关.

如果我将目标放在单引号('')之间,它可以工作:

swipl -s consultingfile.pl -g 'start(1)'
Run Code Online (Sandbox Code Playgroud)

shell可能错误地解释了括号.

如果我使用你的命令它给出:

$ swipl -s consultingfile.pl -g start(1)
bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)

但是请注意bash结肠前.这意味着永远不会给予控制swipl,抱怨括号的是bash.

通常,最好将项目放入引号,以便将内容分组为单个参数.