【发布时间】:2012-02-16 20:20:37
【问题描述】:
第一个 StackOverflow 问题。
我在 prolog 中编写了一个带有三个参数的谓词。它们(分别)是一个字符,一个字符串列表,最后一个参数是第二个参数中以第一个参数开头的所有字符串的列表。我的写语句替代了我完全缺乏关于如何在 SWI-Prolog 中进行跟踪的知识。无论如何,进入代码!
startString(C, [H1|T1], [H2|T2]) :-
atom_chars(H1, [C| _ ]),
H2 = H1,
startString(C, T1, T2).
startString(C, [ _ |T1], Y) :-
startString(C, T1, Y),
write(foo).
startString(_, [], []) :-
write(foo).
哪些输出:
foofoofoo
X = [some, simple]
我的方法是正确的,但谓词没有终止(在写入 X 之后缺少句点并不是一个错误)。我的问题是,为什么不是?从我在互联网上找到的有限递归示例中,我的谓词的第三个版本应该终止谓词并使 x 成为明确的答案。
当我按下回车键时,我可以输入另一个查询,但是我在同一个程序中编写的另一个谓词中有同样的小“问题”。对这个谓词的任何帮助也应该传递给另一个。谢谢!
【问题讨论】: