我的第一个prolog微型程序没有';行不通

我的第一个prolog微型程序没有';行不通,prolog,Prolog,我浏览了Prolog,这是我第一次尝试编写它:它直接在我的第一个查询中出现bug。(在下面的例子中,我要求输入单词('test')) 我的意思是说: word/1 别名/2 别名是可交换的 如果一个变量是另一个变量的别名,那么它就是一个单词 A、 C和D是单词 B是A的别名 这是我列出清单时的知识库。在SWI Prolog控制台中 ?- listing. word(A) :- alias(A, B). word('A'). word('C'). word('D'). alias(A

我浏览了Prolog,这是我第一次尝试编写它:它直接在我的第一个查询中出现bug。(在下面的例子中,我要求输入单词('test'))

我的意思是说:

  • word/1
  • 别名/2
  • 别名是可交换的
  • 如果一个变量是另一个变量的别名,那么它就是一个单词
  • A、 C和D是单词
  • B是A的别名
这是我列出清单时的知识库。在SWI Prolog控制台中

?- listing.
word(A) :-
    alias(A, B).
word('A').
word('C').
word('D').

alias(A, B) :-
        alias(B, A).
alias('A', 'B').

Yes
3 ?- word('test').
ERROR: Out of local stack
Exception: (59,743) alias(_L147, test) ?
知道我的knwoledge基地出了什么问题吗

alias(A, B) :-
        alias(B, A).
alias('A', 'B').
这是一个无限循环。 例如,如果调用
别名(2,4)
,则跟踪如下:

alias(2,4)
alias(4,2)
alias(2,4)
alias(4,2)
alias(2,4)
alias(4,2)
alias(2,4)
alias(4,2)
....
这是一个无限循环。 例如,如果调用
别名(2,4)
,则跟踪如下:

alias(2,4)
alias(4,2)
alias(2,4)
alias(4,2)
alias(2,4)
alias(4,2)
alias(2,4)
alias(4,2)
....

你有一个左递归问题。
请看第133页:

您有一个左递归问题。
请看第133页:

你真是太好了。正是我所需要的。你真好。正是我需要的。