【问题标题】:Getting the head and tail of a list获取列表的头部和尾部
【发布时间】: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 附加到 BC。代码中的append(H1, H2, L3) 有两个参数H1H2,当您查询compose([a,b,c], [d,e,f], L). 时,它们不是列表。在这种情况下它总是会失败。

标签: prolog


【解决方案1】:
compose([X|_],[Y|_], [X,Y]).

不止于此。也许您想为空列表添加案例:

compose([], [], []).
compose([X|_], [], [X]).
compose([], [X|_], [X]).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多