删除列表中的元音编写一个删除元音(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
提交
取消