我希望使用dcg list将分割字符串分成子字符串。
这里是我的代码
any(S, K) --> {member(S,K)}, S.
pre(S) --> any(S, ["di","tri","tetre"]).
split([]) --> "".
split([X|Xs]) --> pre(X), split(Xs).
?- phrase(split(Ls), "tridi").
Ls = [[t, r, i], [d, i]]
这里有一些错误。它被分成字母,预期答案是?- phrase(split(Ls), "tridi").
Ls = [tri,di].
了解这个问题的任何想法?
答案 0 :(得分:1)
对于SWI-Prolog v.7,您需要更改代码,如
any(A,K) --> {member(S,K)}, S, {atom_codes(A, S)}.
pre(S) --> any(S, [`di`,`tri`,`tetre`]).
split([]) --> "".
split([X|Xs]) --> pre(X), split(Xs).
然后
?- phrase(split(Ls), `tridi`).
Ls = [tri, di]
注意我添加了转换为任何// 1。字符串表示的基本原理是documented here。
使用原始代码和查询:
?- set_prolog_flag(double_quotes, codes).
true.
?- phrase(split(Ls), "tridi").
Ls = [tri, di]