gpt4 book ai didi

list - 打印列表的列表,Prolog

转载 作者:行者123 更新时间:2023-12-02 09:31:12 25 4
gpt4 key购买 nike

我得到了这个网格:

tab([[s,f,f,f,s,f,f,f,s],
[f,s,f,f,f,f,f,s,f],
[f,f,s,f,f,f,s,f,f],
[f,f,f,f,f,f,f,f,f],
[s,f,f,f,m,f,f,f,s],
[f,f,f,f,f,f,f,f,f],
[f,f,s,f,f,f,s,f,f],
[f,s,f,f,f,f,f,s,f],
[s,f,f,f,s,f,f,f,s]]).

我想在屏幕上打印,不带括号和逗号。顺便说一句,无论有没有它们,我都无法正确打印。

这些是打印规则:

viewTab([]).
viewTab([H|T]) :-
printList(H),
viewTab(T).

printList([]) :-
nl.
printList([H|T]) :-
write(H),
write(' | '),
printList(T).

我在 Prolog 的终端中这样调用它:

?- viewTab(X), tab(X).

我无法打印任何内容,并且在以下位置出现无限循环:

printList([]) :-
nl.

你能帮我找出错误吗?

或者一些使代码更易于使用的提示。

最佳答案

您的viewTab/1不是一个纯粹的逻辑谓词:它有副作用,并且如果它的参数是变量,它不会终止。

例如:

?- listing(foo).

foo([]).
foo([_|A]) :-
foo(A).

true.

?- foo(X).
X = [] ;
X = [_G256] ;
X = [_G256, _G259] ;
X = [_G256, _G259, _G262] ;
X = [_G256, _G259, _G262, _G265] ;
X = [_G256, _G259, _G262, _G265, _G268] . % and so on

所以这个:

?- viewTab(X), tab(X).

将列表放入 X 中,然后 tab(X) 失败,然后您又回到 viewTab(X),无限循环。

你应该尝试:

?- tab(X), viewTab(X).

关于list - 打印列表的列表,Prolog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32968553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com