谓词不在 SWI-Prolog 中调用

Predicate not calling in SWI-Prolog

solve([("ab","abab"), ("b","a"), ("aba","b"), ("aa","a")], Solution)

答案已送达。

SWI-Prolog 7.x 将 double_quotes 标志的默认值从 codes 更改为 string。这显然是导致您描述的问题的原因。如果您在包含您发布的代码的源文件顶部添加以下指令:

:- set_prolog_flag(double_quotes, codes).

你应该得到:

?- solve([("ab","abab"), ("b","a"), ("aba","b"), ("aa","a")], Solution).
Solution = [4, 4, 2, 1] ;
Solution = [1, 1, 3, 2, 2, 4, 4] ;
Solution = [4, 4, 2, 1, 4, 4, 2, 1] ;
Solution = [1, 1, 3, 2, 2, 4, 3, 4, 2|...] ;
Solution = [1, 1, 3, 2, 2, 4, 4, 4, 4|...] ;