List haskell-concat的Prolog等价物
我试图在prolog中找到haskell的List haskell-concat的Prolog等价物,list,prolog,concat,List,Prolog,Concat,我试图在prolog中找到haskell的concat的等价物 例如,让我们有这样一个列表:[[[a]、[b]、[[c]、[d]]] 我需要将这个列表连接到这样的列表中[[a,b],[c,d]]。到目前为止,我已经尝试了一些带有append的代码,但我想不出正确的解决方案。您可以使用flant/2和append/3解决此问题,方法如下: my_concat([],L,L). my_concat([H|T],LT,LO):- flatten(H,H1), append(LT,[H1
concat
的等价物
例如,让我们有这样一个列表:[[[a]、[b]、[[c]、[d]]]
我需要将这个列表连接到这样的列表中
[[a,b],[c,d]]
。到目前为止,我已经尝试了一些带有append
的代码,但我想不出正确的解决方案。您可以使用flant/2
和append/3
解决此问题,方法如下:
my_concat([],L,L).
my_concat([H|T],LT,LO):-
flatten(H,H1),
append(LT,[H1],LT1),
my_concat(T,LT1,LO).
?- my_concat([[[a],[b]],[[c],[d]]],[],L).
L = [[a, b], [c, d]]
您可以使用
展平/2
和追加/3
解决此问题,方法如下:
my_concat([],L,L).
my_concat([H|T],LT,LO):-
flatten(H,H1),
append(LT,[H1],LT1),
my_concat(T,LT1,LO).
?- my_concat([[[a],[b]],[[c],[d]]],[],L).
L = [[a, b], [c, d]]
另一种方式
my_concat([X], [FX]):-
flatten(X,FX).
my_concat([H|T], [FH| FT]):-
my_concat(T,FT),
flatten(H,FH).
另一种方式
my_concat([X], [FX]):-
flatten(X,FX).
my_concat([H|T], [FH| FT]):-
my_concat(T,FT),
flatten(H,FH).
您的示例与Haskell的concat的正常行为不匹配:
Prelude> concat [[[1],[2]],[[3],[4]]]
[[1],[2],[3],[4]]
?- append([[[a],[b]],[[c],[d]]], Flattened).
Flattened = [[a], [b], [c], [d]].
要执行所需操作,需要将concat
映射到输入列表中的各个列表上:
Prelude> map concat [[[1],[2]],[[3],[4]]]
[[1,2],[3,4]]
在SWI Prolog中,您有与Haskell的concat
相对应的append/2
(两个参数,而不是更常见的append/3
的三个参数):
Prelude> concat [[[1],[2]],[[3],[4]]]
[[1],[2],[3],[4]]
?- append([[[a],[b]],[[c],[d]]], Flattened).
Flattened = [[a], [b], [c], [d]].
在SWI Prolog中,还有一系列与Haskell的映射相对应的映射列表/N
谓词:
?- maplist(append, [[[a],[b]],[[c],[d]]], FlattenedButDifferently).
FlattenedButDifferently = [[a, b], [c, d]].
您的示例与Haskell的concat的正常行为不匹配:
Prelude> concat [[[1],[2]],[[3],[4]]]
[[1],[2],[3],[4]]
?- append([[[a],[b]],[[c],[d]]], Flattened).
Flattened = [[a], [b], [c], [d]].
要执行所需操作,需要将concat
映射到输入列表中的各个列表上:
Prelude> map concat [[[1],[2]],[[3],[4]]]
[[1,2],[3,4]]
在SWI Prolog中,您有与Haskell的concat
相对应的append/2
(两个参数,而不是更常见的append/3
的三个参数):
Prelude> concat [[[1],[2]],[[3],[4]]]
[[1],[2],[3],[4]]
?- append([[[a],[b]],[[c],[d]]], Flattened).
Flattened = [[a], [b], [c], [d]].
在SWI Prolog中,还有一系列与Haskell的映射相对应的映射列表/N
谓词:
?- maplist(append, [[[a],[b]],[[c],[d]]], FlattenedButDifferently).
FlattenedButDifferently = [[a, b], [c, d]].