【问题标题】:running prolog as a script将 prolog 作为脚本运行
【发布时间】:2014-09-18 23:51:23
【问题描述】:

所以,我有一些 Prolog 代码对变量赋值进行建模,例如在编程语言中,并尝试查看它们是否相互兼容。所以,

assigned(X, X).
and(P, Q) :- P, Q.
or(P, Q) :- P.
or(P, Q) :- Q.

% and then we should test an expression like this:
and(assigned(X, 5), assigned(X, 6)).

所以最后一个表达式失败了,因为X 不能同时分配给 5 和 6。

现在,我想做的是让这个测试有一个表达式(可以而且应该硬编码到文件中),然后简单地打印出它是否能够满足。但似乎 SWIPL 真的 想让我以交互方式运行。理想情况下,是这样的:

> ./test-assignments
false.

这肯定是可能的吗?我对此束手无策。

【问题讨论】:

    标签: prolog swi-prolog


    【解决方案1】:

    有几种方法可以让 SWI-Prolog 程序直接从 shell 运行。你可以看看这个问题和答案:

    How to run SWI-Prolog from the command line?

    我现在的个人偏好是有一个像这样的文件example.pl

    :- 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).
    

    然后我从命令行运行:

    $ swipl example.pl and a few arguments
    Example script
    Called with [and,a,few,arguments]
    

    初始化指令告诉解释器在加载程序后评估哪个目标:这里是main/0main 这个名字是一个约定,它可以被称为其他任何名字。

    查看链接的问题和答案以了解其他选项。

    【讨论】:

    • initialization/1 是一个 ISO 指令。
    • @false 是的,你的意思是应该是:- initialization(main).
    • 是的!这样就少了一个障碍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多