2013-07-27 65 views
1

我想通過一些練習快速檢查我的課程。但我沒有解決這些做法的檢查。你能給我一個解決方案,所以當我卡住了。我可以很快找到一些指導。第一個問題如下所述。提前致謝。使用= ..來定義謂詞子句(T1,T2)

問題1。我們記得,如果T是一個項,並且L是包含函子和L的主要子項的列表,則滿足內置謂詞T = .. L。例如,f(a,g(b))=。當L = [f,a,g(b)]時滿足L,並且a = ...當列表= [a]時滿足列表。

使用= ..定義當T1是T2的子項時滿足的謂詞子項(T1,T2)。你可以假設T1和T2沒有變量。您可能還想要按照以下順序使用內置謂詞atomic(X)或compound(X)來檢查X是否是原子項和結構。

我的解決辦法是:

subterm(X,[X]):-atom(X),!. 
subterm(T1,T2):- 
compound(T1), 
T1=..U, 
U=[X|Y], 
T2=Y. 

任何意見,將不勝感激。謝謝!

+1

我認爲你不需要原子/ 1或複合/ 1,而是成員/ 2。請顯示你的嘗試。 – CapelliC

+1

一旦卡住,我們很樂意提供幫助。 –

+0

對不起,延遲迴復。我忙於準備一門考試。我想知道我是否有足夠的時間來解決我們教授給出的所有做法。只要我有一個想法,我會在這裏發佈它來獲得你的指導。 – user2585677

回答

1

如果時間T是其自身的subterm,定義可以很簡單:

subterm(T, T). 
subterm(T1, T2) :- 
    T2 =.. [_|As], 
    member(A, As), 
    subterm(T1, A). 

無論如何,你可以看到如上斷言實現了樹狀結構的長期的「懶惰」的訪問。

+0

感謝您的幫助。我感到慚愧,直接發表簡單的問題而不想。這個問題看起來不太清楚。 – user2585677

相關問題