我已经按照下面的说明在我的linux机器上设置并安装了interprolog和swi prolog :
我已经将unixVariables.sh编辑为包含机器上的java和swi-prolog(pl)可执行文件的路径,并且我的unixVariables.sh如下所示:
# This is a typical environment for Linux, see elsewhere for Mac OS X
JAVA_BIN=/usr/lib/jvm/java-6-sun-1.6.0.16/bin
XSB_BIN_DIRECTORY=/home/YOUR_NAME/XSB271/config
我在我的Mac上运行SWI-prolog时遇到了最大的麻烦。
当我键入时:
/opt/bin/local/swipl
我收到一个错误,说:
/opt/local/bin/swipl: No such file or directory
当我输入"swipl“时,我得到的结果是:
swipl: command not found
我已经在终端和XQuartz上都尝试过了。我甚至进入了
/Applications/SWI-Prolog.app/Contents/MacOS
看看这样做是否有用,但是prolog中的"Welcome“文本从未出现过。很可能是在我在MacOS文件夹中输入
我正在写一个通过扩展谓词来转换其他程序的程序。我通常使用clause/2,来完成此操作,但如果谓词没有参数,它并不总是展开谓词: :- set_prolog_flag('double_quotes','chars').
:- initialization(main).
main :- clause(thing,C),writeln(C).
% this prints "true" instead of "A = 1"
thing :- A = 1. 可以扩展没有参数的谓词吗?
我无法理解这一点:如果我给Prolog reverse([], A).,它工作得很好,如果我给它reverse(A, []).,并在第一个建议时回答;,它就会挂起!
为什么?( GNU Prolog和SICStus Prolog的结果相同!)
aioobe@r60:~$ prolog
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?- reverse([], A).
A = []
yes
| ?- reverse(A, []).
A = [] ? ;
Fatal Error: global s
我已经用swi-prolog开发了一个prolog程序,我用普通的java和JPL.jar为它附加了一个接口,运行良好。
现在我想用android移动界面代替java桌面界面来做同样的事情。所以我创建了一个android应用程序,添加JPL作为外部jar,并像前面一样调用prolog文件。代码中未显示错误。
但当我将其作为安卓应用程序运行时,系统显示无法找到jpl.query$1。
这是logcat
08-21 17:36:35.782: D/dalvikvm(659): DexOpt: unable to opt direct call 0x0cd8 at 0x08 in Ljpl/Quer
我知道这是有限制的,但是有没有一种合理的方法在Prolog代码中加入条件指令,这样它就可以在GNU或SWI中合理地工作?我认为至少在最简单的情况下,内置谓词(如SWI中的sumlist和GNU中的sum_list )在拼写上彼此不匹配。或者SWI有assert,但GNU没有。所以如果能有这样的东西就好了:
:- if($SWI).
SWI version of stuff
:- else.
GNU version of stuff
:- endif.
或者简单地说:
:- if(not_a_builtin(sumlist))
sumlist(L, S) :- sum_list(L, S).
:
我正在尝试从java运行swi prolog。
我正在使用eclipse,并且我已经在项目中插入了jpl.jar (属性->库->添加外部jar),并且当我试图运行一个程序时(它是一个jpl示例,所以它应该可以工作。)我收到一个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jpl in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
at java.lang.
我试着做这个练习,我应该构建一个prolog程序,当给定一个数字和一个列表时,它返回一个没有数字倍数的列表。现在我要说的是:
rm([],[]).
rm(N, [Head|Tail], Result):-
Head mod N =:= 0,
rm(N, Tail, Result).
rm(N, [Head|Tail], [Head|Result]):-
Head mod N =\= 0,
rm(N, Tail, Result).
这不管用,我也不太明白为什么。
我希望有人能解释一下为什么这不管用。
谢谢