在prolog中插入函数

在prolog中插入函数,prolog,Prolog,我正在编写一个insert函数,它包含两个参数,一个数字和一个排序列表,它应该生成相同的列表,并且数字包含在它的正确位置。 以下是我目前得到的信息: insert1(X,[]) :- [X]. insert1(X, [H|T]) :- X > H, insert1(X,T). insert1(X,[H|_T]) :- X < H, T is [X|T]. 我会感谢你们的帮助 错误消息非常神秘:'./2它是列表构造函数,您正在调用它。有关语法的详细

我正在编写一个insert函数,它包含两个参数,一个数字和一个排序列表,它应该生成相同的列表,并且数字包含在它的正确位置。 以下是我目前得到的信息:

insert1(X,[]) :-
   [X].

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

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

我会感谢你们的帮助

错误消息非常神秘:'./2它是列表构造函数,您正在调用它。有关语法的详细解释,请参见问题

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

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

这里是第一条和第三条可能的解决方法

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

好的,让我来做这件事,如果我有任何问题,我会给你回复的。谢谢你的帮助。我仍然有这个问题:这里是我到目前为止得到的:insert1(X,[],[X])。插入1(X[H | T],[H | T]):-X>H,插入1(X,T,| T1)。insert1(X[H | | | T],[X,H | T]):-XH,插入1(X,T,[u Z | T1])。插入1(X[H | |T],[X,H |T1]):-Xinsert1(X[H | T],[H | R]):-X>H,insert1(X,T,R)。
insert1(X, [], [X]).
...
insert1(X, [H|T], [X,H|T]) :-
  X < H.
?- insert1(3, [1,2,3,4], L).