刪除列表中的元音編寫一個刪除元音(String,NoVowelsString)的程序,刪除給定字符串中的所有元音。到目前為止,我已經有了這個條件vowel(X):- member(X,[a,e,i,o,u])。然后我想到了刪除其他列表中所有元素的那個:delete2([],L1,L1).delete2([H|T],L1,L3) :-
delete2(H,L1,R2),
delete2(T,R2,L3).所以有這兩個我認為我可以為那些被刪除的元素設置一個條件,他們必須成為其中的一員[a,e,i,o,u]。雖然我還沒有到達任何地方。
3 回答
12345678_0001
TA貢獻1802條經驗 獲得超5個贊
這里是使用DCG的解決方案。注意如何獲得'輸出'(沒有參數傳遞,只有差異列表)
novowels --> ("a";"e";"i";"o";"u"), !, novowels.% or ..% novowels --> [C], {memberchk(C, "aeiou")}, !, novowels.novowels, [C] --> [C], !, novowels.novowels --> [].我必須承認第二次削減不喜歡我,但似乎需要。
測試:
?- phrase(novowels, "abcdefghilmnopq", L),format('~s',[L]).bcdfghlmnpqL = [98, 99, 100, 102, 103, 104, 108, 109, 110|...].編輯關于第二個剪切,似乎需要'左手'符號:如果我用參數編碼,沒有剪切,我得到一個正確的解析:
novowels(Cs) --> ("a";"e";"i";"o";"u"), !, novowels(Cs).% novowels(Cs) --> [C], {memberchk(C, "aeiou")}, !, novowels(Cs).novowels([C|Cs]) --> [C], novowels(Cs).novowels([]) --> [].測試:
?- phrase(novowels(L), "abcdefghilmnopq"),format('~s',[L]).bcdfghlmnpqL = [98, 99, 100, 102, 103, 104, 108, 109, 110|...] ;false.我想知道這是否是DCG翻譯的錯誤,或者(更可能)我的錯...
添加回答
舉報
0/150
提交
取消
