假设已经给出了可变数量的列表,例如5,但是可以输入任意数量的列表:[1,2] + [3,4,5] + [6,7,8,9] + [10,11] + [12,13,14] equals L.
应该在变量L
内提供以下列表:{{1} }。
以下是两个列表串联的代码:
[1,2,3,4,5,6,7,8,9,10,11,12,13,14]
joinLists([FLH|FLT], SL, [FLH|RLT]):-
joinLists(FLT, SL, RLT).
joinLists([], H, H).
:-op(500, xfx, +).
:-op(600, yfx, equals).
X + Y equals Z:-
joinLists(X, Y, Z).
给出[1,2,3] + [4,5,6,7] equals L.
,但如何解决无限数量的列表问题?
答案 0 :(得分:2)
我认为你的运算符声明是不正确的,总和应该是关联的(我也改变符号,只是为了符合我的审美偏好,并避免改变标准+ / 2的行为):
:-op(500, xfy, ++).
:-op(600, xfx, cat).
然后你可以写
L1 ++ R cat C :- !, R cat R1, append(L1, R1, C).
L cat L .
测试
?- [1,2,3]++[4,5,6]++[7,8,9] cat X.
X = [1, 2, 3, 4, 5, 6, 7, 8, 9].
我认为这种定义没有任何便利,考虑到SWI-Prolog附加/ 2源可用......