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)

解决方案在第一个参数中,然后是您提到的2个列表。我希望你没有要求人们做你的家庭作业。Swi prolog只回答“假”。对于这个问题。让我安装Swi prolog,我会试试。你明白逻辑吗?你是对的,我在测试你的解决方案时犯了一个错误。我很抱歉。对我来说似乎过于复杂和命令式风格。这是一个使用“cut”可能性的示例:)或者:
…,映射列表(\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]].