【问题标题】:Prolog List Merge Question?Prolog列表合并问题?
【发布时间】:2011-08-26 00:58:34
【问题描述】:

这样如何合并两个列表?

[a,b,c] 

[1,2,3]

我想列出这个清单

[a=1,b=2,c=3]. 

我该怎么做? (我使用 swi prolog)

Thanks for your answers. I have a question about it. I write

start:- consult('tennis.pl'),
            see('tennis.pl'),
            repeat,
            read(A),
            A=..List,
            (A\=end_of_file->
            (A\=end_of_file,member('attributes',List)->
            delete(List,'attributes',NewList2);true),
            (A\=end_of_file,member('data',List)->
            delete(List,'data',NewList);true),
            merge(NewList2,NewList,Try),
            write(Try),nl;true),
            A=end_of_file,!,

            seen.


[outlook=_G40,temperature=_G49,humidity=_G58,wind=_G67,play_tennis=_G76]
[_G40=sunny,_G49=hot,_G58=high,_G67=weak,_G76=no]
[_G40=sunny,_G49=hot,_G58=high,_G67=strong,_G76=no]
[_G40=overcast,_G49=hot,_G58=high,_G67=weak,_G76=yes]
[_G40=rain,_G49=mild,_G58=high,_G67=weak,_G76=yes]
[_G40=rain,_G49=cool,_G58=normal,_G67=weak,_G76=yes]
[_G40=rain,_G49=cool,_G58=normal,_G67=strong,_G76=no]
[_G40=overcast,_G49=cool,_G58=normal,_G67=strong,_G76=yes]
[_G40=sunny,_G49=mild,_G58=high,_G67=weak,_G76=no]
[_G40=sunny,_G49=cool,_G58=normal,_G67=weak,_G76=yes]
[_G40=rain,_G49=mild,_G58=normal,_G67=weak,_G76=yes]
[_G40=sunny,_G49=mild,_G58=normal,_G67=strong,_G76=yes]
[_G40=overcast,_G49=mild,_G58=high,_G67=strong,_G76=yes]
[_G40=overcast,_G49=hot,_G58=normal,_G67=weak,_G76=yes]
[_G40=rain,_G49=mild,_G58=high,_G67=strong,_G76=no]

但我有这个结果。为什么?您对此有什么想法吗?

【问题讨论】:

    标签: list merge prolog


    【解决方案1】:

    谓词可能如下所示:

       merge([], [], []).
       merge([X|Xs], [Y|Ys], [X=Y|Zs]) :- merge(Xs, Ys, Zs).
    

    您从空列表的基本情况开始,并按两个具有相同长度的列表的情况进行归纳。

    【讨论】:

    • 感谢您的回答,我想要这个。但是有一个问题 start:-consult('tennis.pl'), see('tennis.pl'), repeat, read(A), A=..List, (A\=end_of_file-> (A\= end_of_file,member('attributes',List)-> delete(List,'attributes',YeniList2);true), (A\=end_of_file,member('data',List)-> delete(List,'data', YeniList);true), merge(YeniList2,YeniList,Dene), write(Dene),nl;true), A=end_of_file,!, 看到。
    • 你应该打开另一个问题并将tennis.pl的内容也放入那个问题中。
    【解决方案2】:

    maplist/4 和一起没问题 lambda expressions:

    ?- use_module(library(lambda)).
    true.
    
    ?- maplist(\K^V^(K=V)^true, [a,b,c], [1,2,3], KVs).
    KVs = [a=1, b=2, c=3].
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      相关资源
      最近更新 更多