【发布时间】:2014-11-16 09:20:13
【问题描述】:
我知道我是否这样做:
[H|T] = [a,b,c,d].
H = a,
T = [b,c,d].
我要做的是在规则中获取列表的头部和尾部。这可能吗?我正在为递归调用设置基本情况,但现在如果它只是返回 L3 作为第一个列表头和第二个列表头的附加,我会很满意。我只是不确定如何获得头部和列表。
compose([], L1, L1).
compose(L2, [], L2).
compose([], [], []).
compose(L1, L2, L3) :-
[H1|T1] = L1,
[H2|T2] = L2,
append(H1, H2, L3).
根据我在网上看到的情况,我也尝试过以下操作:
compose([], L1, L1).
compose(L2, [], L2).
compose([], [], []).
compose([H1|T1], [H2|T2], L3) :-
append(H1, H2, L3).
但在调用此谓词时跟踪失败。在成功的情况下,我希望它执行以下操作:
compose([a,b,c], [d,e,f], L).
L = [a, d].
至少现在。
【问题讨论】:
-
append/3真的应该有列表参数。append(A, B, C)是一个谓词,表示A附加到B是C。代码中的append(H1, H2, L3)有两个参数H1和H2,当您查询compose([a,b,c], [d,e,f], L).时,它们不是列表。在这种情况下它总是会失败。
标签: prolog