我想要使用dcg列表将分割字符串分成子字符串。
这里我的代码
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]]
这里是一些error.it拆分为字母,预期的答案是?- phrase(split(Ls), "tridi").
Ls = [tri,di].
任何想法此PROBL他们吗?
的问题是,你是在混淆你的程序使用的数据类型不同。代码列表,字符列表,字符串,原子....这是Prolog的常见陷阱之一,因为您不必以任何方式声明类型。另外,你正在做的这个'pre - > any'和'member'事情就是我所说的“代码味道”。 –
你在展示完整的课程吗?您使用的是什么Prolog实现?什么版本?你有没有设置一些全球性的旗帜? –
在这个程序中'pre - > any'具有所有列表元素都是字符串或原子。主要问题是查询输入是String,String被拆分为'Ls = [tri,di] .'或'Ls = [“tri “,”di“]。”我正在使用SWI-Prolog版本7.1.17 – Gamsh