1

我正在尝试执行看似简单的三行代码

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].

但由于某种原因,我无法让它在许多在线代码编译器上编译或执行SWISHIDEone等。问题似乎是“插入”不是一个公认的谓词。我尝试了一些谷歌搜索,但似乎没有任何内容可供插入。谢谢!(对不起,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:语法错误:操作员预期

4

2 回答 2

3

您的程序可以与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。)

于 2015-08-27T02:54:03.077 回答
3
于 2015-08-27T01:58:00.727 回答