prolog - 转换一个句子会产生一个无限循环——但如何转换?

标签 prolog text-manipulation failure-slice non-termination

我无法弄清楚这是哪里出了问题。请注意,我对 Prolog 非常陌生,我确定我遗漏了一些东西 - 只是不知道那可能是什么。有人可以帮我吗?

谢谢,这是我的代码:

printSentence([]).   
printSentence([W|[]]) :-
    write(W),
    write('.'),
    nl.  
printSentence([W|R]) :-
    write(W),
    write(' '),
    printSentence(R).

transform([], Result).  
transform([Word|Rest], Result) :-
    replace(Word, Replacement),
    append(Result, Replacement, NewResult),
    transform(Rest, NewResult).

replace(my, your).
replace(i, you).
replace(you, me).
replace(am, are).
replace(Word, Word).

test :-
    X = [you, are, my, only, hope],
    transform(X, Result),
    printSentence(Result).

最佳答案

这应该有效。请注意,您在 transform([],Result) 中有一个单例。此外, append 无法按照您尝试使用它的方式工作,但您通常走在正确的轨道上。

transform([], []).

transform([Word|Rest], [Replacement|RestOfResult]) :-
    replace(Word, Replacement),
    transform(Rest, RestOfResult).

关于prolog - 转换一个句子会产生一个无限循环——但如何转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870187/

相关文章:

linux - 从代码中删除多余的大括号

graph - 如何将文本文件自动转换为graphviz点文件?

prolog - Prolog终止域:我如何知道哪些问题将返回有限数量的答案?

prolog - 如何找到对目标没有贡献的事实

Prolog - 更简洁的规则定义方式

prolog - Prolog计算谓词为真的次数

git - 如何在一行中获取带有简短统计信息的 Git 日志?

parsing - 使用 DCG 在 EBNF 的 Prolog 中实现 DSL 的困难

序言: backtrack more than one step backwards (backjumping!)?

prolog - 使用 Prolog 从数字倒数