2014-05-18 42 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的好方法。如果你需要參考變量,給他們的名字。這個問題有些不合格。我對代碼有一種「」「的感覺。但它是,我希望它可以幫助你。