Prolog文件:什么“运行”swipl -f main.pl“”是什么意思?

时间:2013-09-28 02:15:47

标签: prolog osx-lion

我在Mac OSX上的SWI Prolog中的? - 提示符之后尝试了括号和单引号的各种组合。没有任何效果。该命令是否应该一次加载一堆文件?在我进入? - 提示之前,我会输入一些东西吗?

如果有人能告诉我下面#1的确切内容,那就太棒了。 (我不是程序员,但我一直在努力为我的认知科学课程介绍找到一个简单的专家系统shell。我已经尝试了Amzi鸟类的事情大约一百万次,除了错误之外什么都没有Amzi以及SWI)。谢谢!

Prolog专家系统(APES)  http://apes.sourceforge.net/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

运行:

  1. 安装swi-prolog(应该适用于任何ISO标准的Prolog解释器,但这是未经测试的)
  2. 运行“swipl -f main.pl”
  3. 输入“start。”
  4. 更新: (非常感谢hardmath和user882813!)我得到一个命令不存在错误“swipl -f main.pl”,所以我手动启动SWI Prolog abd加载main.pl。这是main.pl的代码:

    % A Prolog Expert System (APES)
    % http://apes.sourceforge.net/
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    :- ensure_loaded('engine.pl').
    :- ensure_loaded('tokenizer.pl').
    :- ensure_loaded('parser.pl').
    :- ensure_loaded('knowledge/knowledge.pl').
    :- ensure_loaded('knowledge/groups/*.pl').
    :- ensure_loaded('helpers.pl').
    :- ensure_loaded('processor.pl').
    
    start:-
        %dynamic((::)/2),
        write('_____________________________________________________'),
        nl,nl,
        loop_read_in(_).
    
    loop_read_in(X):-
        % from tokenizer.pl (clocksin & mellish, "programming in prolog"):
        read_in(X),
        process(X),
        loop_read_in(_).
    
    loop_read_in(X):-
        read_in(X), 
        not(process(X)),
        !,fail.
    

    但是这里发生了什么:当我进入开始时我得到一个文件不存在错误:     错误:/Users/leesebastiani/prologfiles/main.pl:10:         source_sink`knowledge / groups / * .pl'不存在

    但是当我尝试手动加载时,我得到了这个:     ? - ['knowledge / groups / *。pl']。     错误:/Users/leesebastiani/prologfiles/main.pl:10:         source_sink`knowledge / groups / * .pl'不存在     警告:/Users/leesebastiani/prologfiles/main.pl:10:         目标(指令)失败:用户:ensure_loaded(knowledge / groups / * .pl)

    我想让我的学生们轻松一点。这是我上一次完整的会议:

    ?- ['main.pl'].
    %  engine.pl compiled 0.00 sec, 64 clauses
    %  tokenizer.pl compiled 0.00 sec, 62 clauses
    %  parser.pl compiled 0.00 sec, 32 clauses
    %  knowledge/knowledge.pl compiled 0.00 sec, 17 clauses
    ERROR: /Users/leesebastiani/prologfiles/main.pl:10:
        source_sink `knowledge/groups/*.pl' does not exist
    Warning: /Users/leesebastiani/prologfiles/main.pl:10:
        Goal (directive) failed: user:ensure_loaded(knowledge/groups/*.pl)
    %  helpers.pl compiled 0.00 sec, 24 clauses
    %  processor.pl compiled 0.00 sec, 12 clauses
    % main.pl compiled 0.01 sec, 227 clauses
    true.
    
    ?- ['knowledge/groups/*.pl'].
    % knowledge/groups/feline.pl compiled 0.00 sec, 2 clauses
    % knowledge/groups/pet.pl compiled 0.00 sec, 5 clauses
    true.
    
    ?- ['main.pl'].
    ERROR: /Users/leesebastiani/prologfiles/main.pl:10:
        source_sink `knowledge/groups/*.pl' does not exist
    Warning: /Users/leesebastiani/prologfiles/main.pl:10:
        Goal (directive) failed: user:ensure_loaded(knowledge/groups/*.pl)
    % main.pl compiled 0.00 sec, 1 clauses
    true.
    
    ?- 
    

    感谢您的任何建议!

4 个答案:

答案 0 :(得分:2)

对我来说,这是有效的(在Mac OS 10.8.5上):

$ git clone https://github.com/fsteeg/apes.git
[...]
$ cd com.quui.apes/src/
$ swipl -f main.pl
?- start.

我使用的是GitHub版本,但代码应该是相同的。你的SWI-Prolog版本会出现问题吗?我用Homebrew(http://brew.sh/)安装了我的:

$ brew install swi-prolog
[...]
$ swipl --version
SWI-Prolog version 6.0.2 for i386-darwin12.5.0

如果这没有帮助,您是否可以在运行swipl -f main.pl时提供有关原始问题的一些详细信息?

答案 1 :(得分:0)

命令“swipl -f main.pl”是在OS命令提示符下输入的,而不是在? - 提示符下的SWI-Prolog中输入的。

该命令执行顶级命令解释程序并加载Prolog源文件main.pl

答案 2 :(得分:0)

在这种情况下,“swipl -f main.pl”是一个在命令行提示符下输入的命令,它启动swi-prolog并加载主程序文件。

如果您已经启动了SWI-Prolog,那么只需通过File⇒Open菜单项从APES distrubution打开main.pl文件,然后输入“start”。 (不带引号)并按回车。

更新:我收到了关于:- ensure_loaded('knowledge/groups/*.pl').行的相同错误,只是用两行代替*.pl取代了确切的文件名:

:- ensure_loaded('knowledge/groups/feline.pl').
:- ensure_loaded('knowledge/groups/pet.pl').

不确定这是解决此问题的正确方法。

答案 3 :(得分:0)

AMZI教程已经过时了。试图让它在没有Prolog知识的情况下运行,看起来像一个痛苦的世界。 你可能想找到别的东西。这太糟糕了 - 这是一个很棒的教程。

如果您是专家系统的新手,请让我建议CLIPS

http://clipsrules.sourceforge.net/

Prolog不是它自己的专家系统shell。 Prolog是一种编程语言。当然,它是编写这样一个shell的绝佳选择。