2010-01-28 36 views
2

我正在研究這個美妙的Prolog項目,我被困在這種情況下,我需要將某些單詞翻譯成其他單詞(例如,「我」變成「你」。「我」變成「你的」 )Translate Prolog Words

這就是我所做的,我很肯定它有點不安,我輸入句子,當它轉換它只會改變一個詞,然後對我很古怪(例如「我覺得。快樂」更改爲 「你」,那麼它崩潰)

translate([]). 
translate([H|T], [NewH|NewT]):- 
      means(H,NewH); 
      spit(T,NewT). 
means(i,you). 
means(my,your). 
means(mine,yours). 

回答

2

這裏的修復:

translate([], []). 
translate([H|T], [NewH|NewT]):- 
      means(H, NewH), 
      translate(T,NewT). 
means(i, you) :- !. 
means(my, your) :- !. 
means(mine, yours) :- !. 
means(X, X). 

的變化如下:

  1. 我固定缺少的參數翻譯的第一個定義(它被認爲是一個完全獨立的功能,如果參數的數量不匹配)。
  2. 當第一個項目被翻譯時,我在列表的其餘部分打電話translate
  3. 我斷言,除非另有說明,否則每個詞都表示自己。 :- !部分意味着如果你匹配這個,不要嘗試其餘的(這是爲了避免列表總是與自己匹配)。

用法示例:

?- translate([this, is, i], X). 
X = [this, is, you]. 
+2

隨着SWI-Prolog的的'MAPLIST/N',你可以只寫' - MAPLIST(手段,[這是我],X)。 X = [this,is,you] .',即不需要定義'translate/2'。 – Kaarel 2010-01-28 03:22:01

+0

謝謝,完美的工作:D – 2010-01-28 03:22:28

+0

@Kaarel,這個問題被標記爲「初學者」,所以我認爲最好是逐步展示它。 – 2010-01-28 03:24:20