我想要使用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