2014-05-18 43 views
-1

我有两个列表,例如,L1 = [yellow, green, _, blue]L2 = [green, yellow, blue, red],我需要创造一个在L1的anonnymous变量(_),是由缺少字L2取代第三列表,在完全相同的地方...像这样,L3 = [yellow, green, red, blue]序言 - 列表和匿名变量

+1

这是功课吗?你有尝试过什么吗? –

回答

0

我怀疑这是家庭作业,因为它没有任何意义。 _代表Prolog中的一个变量,但是你不能用你描述的那些东西来做。请注意,不可能想出合理的问题的合理表述。

你可以做的一件事达到相同效果的一件事是从一个列表中统一事物与另一个列表中的事物。该断言会做的工作:

match_up([], []). 
match_up(L1, L2) :- 
    select(X, L1, L1_Remaining), 
    select(X, L2, L2_Remaining), 
    match_up(L1_Remaining, L2_Remaining). 

此断言基本上说,发现L1的元素,发现L2的相应元素,并尝试递归处理剩余物。但是,要使用它来解决您的问题,您只需尝试一下,看看变量是否在过程中收到绑定。它发生,它的作用:

main :- 
    L1 = [yellow, green, _, blue], 
    L2 = [green, yellow, blue, red], 
    match_up(L2, L1), 
    write(L1). 

如果你运行它,你会得到所需的输出:

?- main. 
[yellow,green,red,blue] 

你也得到了一组更一致的解决方案(?〜24),由于事实因为在这个特定的配对中没有含糊不清的东西,所以它们只是相同的,但是你可以想象其他配对在哪里会出现歧义。

这不是使用Prolog的好方法。如果你需要参考变量,给他们的名字。这个问题有些不合格。我对代码有一种“”“的感觉。但它是,我希望它可以帮助你。