我正在爲我的任務而苦苦掙扎。 首先,我們必須定義謂詞tree/1
,其中node(leaf(1), node(leaf(2), leaf(3)))
。應該返回true獲取二叉樹的標籤
tree(leaf(_)).
tree(node(X,Y)) :- tree(X), tree(Y).
很簡單。
現在我必須寫兩個謂詞,它們本質上應該是一樣的。 label/2
和labels/2
。
label(B,X)
檢查X
是否爲B
中的標籤,並應打印X=1;X=2;X=3
。 (B
是二叉樹)
labels(B,Y)
與label/2
相同,只是Y
是包含所有標籤的列表。 (Y=[1,2,3])
。
我有什麼權利現在:
label(leaf(Y),X) :-
%print X?
label(node(Y,Z),X) :-
label(Y,X), label(Z,X).
和
labels(leaf(Y),X) :-
%append Y to X
labels(node(Y,Z),X) :-
labels(Y,X), labels(Z,X).
我不能左右的Prolog打印時只是真實,總結我的頭時,它提供了X
/Y
的解決方案。
非常感謝你。在Prolog中看起來簡單的解決方案真是太神奇了,但作爲初學者可以變得相當複雜。爲什麼你會爲label/2建議兩個單獨的子句?它只是強調OR? –
@TaikiKurosowa - 我同意:Prolog非常簡單,而且非常優雅,但對於在其他語言中使用的程序員,它有點難以適應。我建議使用兩個子句,而不是一個帶有「或」的子句,因爲我發現兩個子句更容易理解。但我想可以是個人品味的問題。 – max66