删除列表中的元音

删除列表中的元音

编写一个删除元音(StringNoVowelsString)的程序,删除给定字符串中的所有元音。

到目前为止,我已经有了这个条件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]。虽然我还没有到达任何地方。


肥皂起泡泡
浏览 483回答 3
3回答

12345678_0001

这里是使用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翻译的错误,或者(更可能)我的错...
打开App,查看更多内容
随时随地看视频慕课网APP