2

我正在编写一个插入函数,该函数接受两个参数,一个数字和一个排序列表,它应该生成相同的列表,其中数字包含在其正确位置。这是我到目前为止得到的:

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

我会很感激你的帮助。

4

1 回答 1

0

错误消息相当神秘:'.'/2 它是列表构造函数,您正在调用它。有关语法的详细说明,请参阅问题。

最后一个子句也是错误的,因为 is/2只能用于算术。

但通常你是从错误的“角度”来处理问题。Prolog 中的参数是不可变的。您需要另一个参数来保存修改后的列表。

这是第一个和第三个子句的可能解决方法

insert1(X, [], [X]).
...
insert1(X, [H|T], [X,H|T]) :-
  X < H.

您将需要调整第二个子句并以这种方式调用 insert1

?- insert1(3, [1,2,3,4], L).
于 2012-12-16T21:24:44.163 回答