2017-05-07 56 views
1

我有一個Prolog語句解析器,它返回一個句子(作爲列表傳入),分成兩部分 - Noun_PhraseVerb_Phrase。見下面的例子:在Prolog中獲取複雜複合詞中的變量

sentence(Sentence, sentence(np(Noun_Phrase), vp(Verb_Phrase))) :- 
     np(Sentence, Noun_Phrase, Remainder), 
     vp(Remainder, Verb_Phrase). 

現在,我想借此Noun_PhraseVerb_Phrase,並將它們傳遞到另一個Prolog的謂詞,但首先我想提取從Verb_Phrase第一項(這應該永遠是一個動詞)變成一個變量,其餘的變成另一個變量,並將它們分別傳遞給下一個謂詞。

我想過使用的統一,這和我曾嘗試:

sentence(Sentence, sentence(np(Noun_Phrase), vp(Verb_Phrase))), 
    [Head|Tail] = Verb_Phrase, 
    next_predicate(_, Noun_Phrase, Head, Tail, _). 

但我正在逐漸出錯:每次局部堆棧異常的。我認爲這與Verb_Phrase並不真正成爲一個列表有關。這是VERB_PHRASE的可能isntance:

VP = vp(vp(verb(making), adj(quick), np2(noun(improvements)))) 

我怎麼能得到verb(X)可變動詞和任期varaible休息的序言中休息了這樣的複合詞的?

回答

1

您可以使用=../2,如:

Verb_Phrase=..[Verb|Rest_Term_list]. 

例子:

?- noun(improvements)=..[Verb|Rest_Term_list]. 
Verb = noun, 
Rest_Term_list = [improvements]. 
+0

謝謝,這似乎做非常相似,我所需要的東西。 –

+0

很高興幫助! – coder