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翻译的错误,或者(更可能)我的错...