尝试使用prolog将变量分配/提取到列表列表中的不同元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试使用prolog将变量分配/提取到列表列表中的不同元素相关的知识,希望对你有一定的参考价值。

我正在尝试通过这个Prolog problem,但是,我正在努力让我的解决方案工作,并想知道是否有人可以帮我修复错误-example trace。到目前为止,这是我的代码;

process(L1, [H2|T2], [H2|T], Inconsistent):-
    H2 = [Name, Number, _Info],
    elementInList(L1, [Name, Number]),
    process(L1, T2, T, Inconsistent).
process(L1, [H2|T2], Consistent, [H2|T]):-
    H2 = [Name, Number, _Info],
    + elementInList(L1, [Name, Number]),
    process(L1, T2, Consistent, T).
process(_L1, [], [], []).

elementInList([H|T], H).
elementInList([H|T], E):-
    elementInList(T, E).

编辑:问题固定。解决方案:working code

答案

您需要在几个地方替换方括号到paranthesis。这是完整的代码,在swi - prolog上完美运行。我添加了剪切并完成了一些优化的语句。

process(_L1, [], [], []):- !.
process(L1, [H2|T2], [H2|T], Inconsistent):-
    H2 = (Name, Number, _Info),
    elementInList(L1, (Name, Number)), !,
    process(L1, T2, T, Inconsistent).
process(L1, [H2|T2], Consistent, [H2|T]):-
    H2 = (Name, Number, _Info),
    + elementInList(L1, (Name, Number)),
    process(L1, T2, Consistent, T).

elementInList([H|_], H):- !.
elementInList([_|T], E):-
    elementInList(T, E).

以上是关于尝试使用prolog将变量分配/提取到列表列表中的不同元素的主要内容,如果未能解决你的问题,请参考以下文章

如何通过Prolog将字符串连接到列表中的多个元素?

Prolog约束逻辑编程 - 如何在给定整数列表的情况下在域变量列表上设置域?

Prolog中的列表处理计算以找到朋友将访问的目的地

列表中的唯一元素(Prolog)

Prolog 列表中的两颗星

Prolog 中的子列表谓词