为了账号安全,请及时绑定邮箱和手机立即绑定

删除列表中的元音

删除列表中的元音

删除列表中的元音编写一个删除元音(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翻译的错误,或者(更可能)我的错...


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 482 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信