我一直在尝试解决 Prolog 中的寻路问题。谓词在哪里
edge(a,b).
edge(a,c).
edge(b,d).
edge(c,d).
edge(d,e).
edge(d,f).
edge(f,g).
edge(X,Y) :- edge(X,Z), edge(Z,Y).
然后是我编译并运行查询时
的规则| ?- edge(a,X)
。它显示
Fatal Error: local stack overflow (size: 8192 Kb, environment variable used: LOCALSZ)
然后我搜索了解决方案,发现在我们的规则中包含atom(x).
,atom(y).
可以解决堆栈溢出问题。即新规则是
edge(X,Y) :- atom(X), atom(Y), edge(X,,Z), edge(Z,Y).
是的,它确实解决了堆栈溢出问题。但是,我想知道这个 (atom/1) 谓词究竟是如何解决我的问题的?它对我们的变量有什么作用X,Y
来解决 StackOverflow 问题?我是 Prolog 的新手,任何帮助将不胜感激,谢谢。:)