2012-02-01 86 views
1

ndProlog程序應該使用謂詞將單詞分爲音節: 1.音節:元音輔音元音,2.音節:元音輔音輔音元音。例如, ;範每
我的程序不能做到這一點Prolog程序使用謂詞將單詞分爲音節

vowel(a). 
vowel(e). 
vowel(i). 
vowel(o). 
vowel(u). 
vowel(y). 

consonant(L) :- not(vowel(L)). 

append([X|Y],Z,[X|W]) :- append(Y,Z,W). 
append([],X,X). 

append([X,X1,X2,'-'], 

sylsplit(_,[]). 
sylsplit([X,X1,X2|Y],[X,X1,X2,'-'|W]) :- vowel(X1), consonant(X2), vowel(X3), sylsplit(Y,W). 
sylsplit([X|Y],[X|W]) :- sylsplit(Y,W). 
sylsplit([],L). 

%sylsplit([a,n,a,l,o,g],L). 

回答

1

通過sylsplit走向依次是:

  1. 您第一條規則說ANTYHING具有空列表的分裂;很確定這是不對的,因爲你的結果不應該比你的輸入更快。
  2. 你的第二條規則檢查X3是否爲元音,但從不匹配任何東西;同樣,它不檢查任何東西。
  3. 你的第三條規則看起來不錯。
  4. 你的最後一條規則說空列表應該有一個未定義變量的結果?

另外我不能相信,不是預定義的,但附加不是(和你的第三行的追加是不完整的)。

+0

非常感謝您的幫助 – 2012-02-18 17:23:02

+0

我重寫了我的程序,但謂詞「名稱」仍然不起作用(使用謂詞「名稱」是mondatory。 – 2012-02-18 17:30:16

+0

我沒有在您的原始代碼中看到任何謂詞「名稱」 ;如果是在你的新版本中,我不得不看它評論。 – 2012-02-18 18:24:49