List 序言列表问题
我想做些什么List 序言列表问题,list,prolog,predicate,meta-predicate,List,Prolog,Predicate,Meta Predicate,我想做些什么 [a,b,c,d] and [[1,2,3,4],[5,6,7,8],[43,34,56,5],[23,32,2,2]] 我使用swi prolog,可以吗 非常感谢。试试这个: [[a,1,2,3,4],[b,5,6,7,8],[c,43,34,56,5],[d,23,32,2,2]] 我仔细检查了一下,它行得通 “如果”代表“先插入” 更新:如何使用 将函数写入文件“a.pl”,然后写入swi prolog类型: solve([], [], []). solve([[X|
[a,b,c,d] and
[[1,2,3,4],[5,6,7,8],[43,34,56,5],[23,32,2,2]]
我使用swi prolog,可以吗
非常感谢。试试这个:
[[a,1,2,3,4],[b,5,6,7,8],[c,43,34,56,5],[d,23,32,2,2]]
我仔细检查了一下,它行得通
“如果”代表“先插入”
更新:如何使用
将函数写入文件“a.pl”,然后写入swi prolog类型:
solve([], [], []).
solve([[X|Y]|S], [X|L1], [Y|L2]):-
solve(S, L1, L2).
然后键入:
['a.pl'].
您将获得:
solve(X, [a,b,c,d], [[1,2,3,4],[5,6,7,8],[43,34,56,5],[23,32,2,2]]).
我有一种奇怪的感觉,我在做你的家庭作业。是吗?SWI Prolog可以通过两个短谓词来实现这一点:
X = [[a, 1, 2, 3, 4], [b, 5, 6, 7, 8], [c, 43, 34, 56, 5], [d, 23, 32, 2, 2]]
以下是输入和输出的示例:
merge0(A, B, Prev, Next) :- append(Prev, [[A|B]], Next).
merge(A, B, Result) :- foldl(merge0, A, B, [], Result).
像这样使用:
a(X) :- X = [a,b,c,d].
b(X) :- X = [[1,2,3,4],[5,6,7,8],[43,34,56,5],[23,32,2,2]].
?- a(A), b(B), merge(A, B, Result).
Result = [[a, 1, 2, 3, 4], [b, 5, 6, 7, 8], [c, 43, 34, 56, 5], [d, 23, 32, 2, 2]].
编辑 正如注释中指出的,在上述
maplist/4
goal中可以使用不同的lambda术语
maplist(\H^T^[H|T]^true,As,Bss,Css)
maplist(\H^T^=([H|T]),As、Bss、Css)
…,映射列表(\H^T^=([H|T]),As,Bss,Cs)。
@false。聪明!lambda args+化合物的良好组合(用于部分目标应用)。应该是Prolog lambda教程的一部分。。。
a(X) :- X = [a,b,c,d].
b(X) :- X = [[1,2,3,4],[5,6,7,8],[43,34,56,5],[23,32,2,2]].
?- a(A), b(B), merge(A, B, Result).
Result = [[a, 1, 2, 3, 4], [b, 5, 6, 7, 8], [c, 43, 34, 56, 5], [d, 23, 32, 2, 2]].
?- As = [a,b,c,d],
Bss = [[1,2,3,4],[5,6,7,8],[43,34,56,5],[23,32,2,2]],
maplist(\H^T^[H|T]^true,As,Bss,Css).
As = [ a , b , c , d ],
Bss = [[ 1,2,3,4],[ 5,6,7,8],[ 43,34,56,5],[ 23,32,2,2]],
Css = [[a,1,2,3,4],[b,5,6,7,8],[c,43,34,56,5],[d,23,32,2,2]].