我正在寻找适用于 Mac OS X 的 SWI-Prolog 编辑器,但我找不到,那么有没有或者我必须使用另一个编辑器来构建 Prolog 文件?
谢谢
设想
我有如下代码。我的问题是如何不多次显示相同的结果。
male(charles).
male(andrew).
male(edward).
female(ann).
age(charles, 70).
age(ann, 65).
age(andrew, 60).
age(edward, 55).
nextking(X) :- age(X,P), age(Y,Q),
P>=Q, X\==Y; age(X,55).
Run Code Online (Sandbox Code Playgroud)
电流输出
我需要的
我需要输出是查尔斯、安、安德鲁、爱德华。没有重复的名字。
我正在使用Windows,我想用cmd解释/编译prolog文件,是否有任何方法可以做到这一点?目的是为解释器/编译器prolog创建一个shell到一个文件,如:
gplc -output C:\ a.output -input C:\ a.pl
并在输出文件中作为我的目标的答案.我已经阅读了swi-prolog.com的一些文档,但我没有找到.
我曾尝试使用GNU Prolog(并且它为gcc引发了一个错误)
我有这个文件D:\ a.pl mouther(john).吉吉(OK).
? - jiji(好的).
在CMD中我运行swipl -s D:\ a.pl -o D:\ a2.txt
我想在a2中找到我的目标的答案,但它不是/
我有一个源文件openpage.pl,我在其中调用use_module/1来"导入"SWI-Prolog的http_open/3:
use_module(library(http/http_open)).
request(URL, In) :- http_open(URL, In, []),
copy_stream_data(In, user_output),
close(In).
Run Code Online (Sandbox Code Playgroud)
加载没有抱怨.但是,尽我所能,我不能在其中运行规则.
?- [openpage].
% openpage compiled 0.00 sec, 1,828 bytes
true.
?- request('http://www.google.com', In).
ERROR: request/2: Undefined procedure: http_open/3
?- use_module(library(http/http_open)).
true.
?- request('http://www.google.com', In).
ERROR: request/2: Undefined procedure: http_open/3
?- make.
% Scanning references for 1 possibly undefined predicates
Warning: The predicates below are not defined. If these are defined
Warning: at runtime using assert/1, use :- dynamic Name/Arity.
Warning:
Warning: http_open/3, which is referenced by
Warning: status/2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在崇高文本3上编译prolog的代码,但我总是得到
[Errno 2] No such file or directory: 'swipl'
[cmd: ['swipl', '-f', '', '-t', 'main', '--quiet']]
[dir: /Applications/Sublime Text.app/Contents/MacOS]
[path: /usr/bin:/bin:/usr/sbin:/sbin]
[Finished]
Run Code Online (Sandbox Code Playgroud)
因为我不知道如何在sublime上修改swipl的路径.一些帮助?
谢谢
convertBinToDec(B,D):- atom_number(S,B),
atom_length(S,L),
sub_atom(S, 0, 1, After,S1),
atom_number(S1,N),
L1 is L-1,
sub_atom(S, 1,L1, After ,S2),
atom_number(S2,B2),
convertBinToDec(B2,D1),
D is D1+((2*N)**L1).
convertBinToDec(0,0).
convertBinToDec(1,1).
Run Code Online (Sandbox Code Playgroud)
谓词采用 B 是整数形式的二进制数,应该返回 D 其相应的十进制形式,对不起,我对声明式编程语言还是个新手,但我不知道为什么我上面的代码总是错误,我觉得有什么问题使用基本情况 也不允许使用 prolog 库