我正在编写一个插入函数,它接受两个参数,一个数字和一个排序列表,它应该生成相同的列表,其中包含的数字位于正确的位置。 这是我到目前为止所得到的:
insert1(X,[]) :-
[X].
insert1(X, [H|T]) :-
X > H,
insert1(X,T).
insert1(X,[H|_T]) :-
X < H,
T is [X|T].
我收到以下错误:
ERROR: '.'/2: Arguments are not sufficiently instantiated ("x" must hold one character)
Exception: (6) insert1(2, [1, 4, 5]) ? creep
非常感谢你们的帮助。
答案 0 :(得分:0)
错误信息是相当神秘的:'。'/ 2它是列表构造函数,你正在调用它。有关语法的详细说明,请参阅this问题。
最后一个子句也是错误的,因为/ 2 必须才能用于算术。
但一般来说,你是从错误的“视角”接近问题。 Prolog中的参数是不可变的。您需要另一个参数来保存修改后的列表。
以下是第一个和第三个子句的可能解决方法
insert1(X, [], [X]).
...
insert1(X, [H|T], [X,H|T]) :-
X < H.
您需要调整第二个子句并以这种方式调用insert1
?- insert1(3, [1,2,3,4], L).