在 SWI-Prolog swish 中使用插入谓词?
Using insert predicate in SWI-Prolog swish?
我正在尝试执行看似简单的三行代码
insert(X,[],[X]).
insert(X,[H|T],Z):-X>=H,Z=[X,H|T].
insert(X,[H|T],Z):-X<H,insert(X,T,Z2),Z=[H|Z2].
但出于某种原因,我无法在许多在线代码编译器上编译或执行它 SWISH, IDEone,等等。看来问题是 "insert" 未被识别谓词。我尝试了几次 google 搜索,但似乎没有任何内容可以插入。谢谢! (抱歉对 Prolog 很陌生)
ERROR: /home/uJ0Y9U/prog:13:
No permission to modify static procedure `true/0'
Warning: /home/uJ0Y9U/prog:15:
Goal (directive) failed: user:main
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
Exception: (3) program ? EOF: exit
编辑:非 ascii 字符似乎存在问题。这导致了错误
错误:/home/F3Vzlp/prog:10:21:语法错误:需要运算符
错误:/home/F3Vzlp/prog:11:21:语法错误:预期运算符
您使用的破折号 (‐
) 有问题,它似乎不是 ascii 减号 (-
)。
事实上,如果您在终端中输入:
iconv -c -f utf-8 -t ascii <<EOF
然后粘贴您的代码并按 CTRL+D,您会看到减号将被删除..
尝试手动重写您的代码,或将其粘贴到某处并手动更正 :-
中的减号,这样就没问题了。
您的程序可以运行,例如使用 http://swish.swi-prolog.org/、swipl 和 gprolog。这是使用后者的成绩单:
$ gprolog --consult-file insert.prolog
GNU Prolog 1.4.4 (64 bits)
...
insert.prolog compiled, 3 lines read - 1234 bytes written, 16 ms
| ?- insert(1,[0,2,4], X).
insert(1,[0,2,4], X).
X = [1,0,2,4] ? ;
;
no
| ?-
您遇到的第一条错误消息(关于 "true/0")表明某处有一些无关的文本。
顺便说一句,你的程序可以稍微改进一下。 (提示:不需要 Z。)
我正在尝试执行看似简单的三行代码
insert(X,[],[X]).
insert(X,[H|T],Z):-X>=H,Z=[X,H|T].
insert(X,[H|T],Z):-X<H,insert(X,T,Z2),Z=[H|Z2].
但出于某种原因,我无法在许多在线代码编译器上编译或执行它 SWISH, IDEone,等等。看来问题是 "insert" 未被识别谓词。我尝试了几次 google 搜索,但似乎没有任何内容可以插入。谢谢! (抱歉对 Prolog 很陌生)
ERROR: /home/uJ0Y9U/prog:13:
No permission to modify static procedure `true/0'
Warning: /home/uJ0Y9U/prog:15:
Goal (directive) failed: user:main
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
Exception: (3) program ? EOF: exit
编辑:非 ascii 字符似乎存在问题。这导致了错误 错误:/home/F3Vzlp/prog:10:21:语法错误:需要运算符 错误:/home/F3Vzlp/prog:11:21:语法错误:预期运算符
您使用的破折号 (‐
) 有问题,它似乎不是 ascii 减号 (-
)。
事实上,如果您在终端中输入:
iconv -c -f utf-8 -t ascii <<EOF
然后粘贴您的代码并按 CTRL+D,您会看到减号将被删除..
尝试手动重写您的代码,或将其粘贴到某处并手动更正 :-
中的减号,这样就没问题了。
您的程序可以运行,例如使用 http://swish.swi-prolog.org/、swipl 和 gprolog。这是使用后者的成绩单:
$ gprolog --consult-file insert.prolog
GNU Prolog 1.4.4 (64 bits)
...
insert.prolog compiled, 3 lines read - 1234 bytes written, 16 ms
| ?- insert(1,[0,2,4], X).
insert(1,[0,2,4], X).
X = [1,0,2,4] ? ;
;
no
| ?-
您遇到的第一条错误消息(关于 "true/0")表明某处有一些无关的文本。
顺便说一句,你的程序可以稍微改进一下。 (提示:不需要 Z。)