给定一个列表L1
,一个位置P
和一个元素A
。我试图返回一个新的列表,在其中将元素A
添加到列表L1
的位置P
,并以这种方式返回答案:
?- add_member(1,3,[2,3,4,5],A).
X=[2,3,1,4,5].
这是我的代码:
add_member(X, P, [H|T], NewList) :-
(P>1,
write('p>1 start | '),
P1 is P-1,
add_member(X, P1, T, Newlist1),
NewList is [H, Newlist1]),
write('p>1 end ');
(P=1,
write('p=1 start | '),
NewList is [X,H|T],
write('p=1 end | ')).
这里P
表示位置,X
表示要插入的元素。我使用write('---')
来了解代码的工作方式(类似于调试)。以下是它的输出(含错误):
?- add_member(1,3,[2,3,4,5],x).
p>1 start | p>1 start | p=1 start |
ERROR: Type error: `[]' expected, found `[1,4,5]' (a list) ("x" must hold one character)
ERROR: In:
ERROR: [13] _22972 is [1,4|...]
ERROR: [12] add_member(1,1,[4,5],_23016) at /mnt/c/Users/mill/Documents/q2.pl:1
ERROR: [11] add_member(1,2,[3,4|...],_23058) at /mnt/c/Users/mill/Documents/q2.pl:5
ERROR: [10] add_member(1,3,[2,3|...],x) at /mnt/c/Users/mill/Documents/q2.pl:5
ERROR: [9] toplevel_call(user:user: ...) at /usr/lib/swi-prolog/boot/toplevel.pl:1117
这里,q2.pl
是文件名,而toplevel.pl
无法访问。我正在使用Windows子系统Linux (WSL)。
我该如何完成代码?这里有什么概念我没有掌握吗?