在PROLOG中写入时不打印变量值
我试图在屏幕上打印列表中的元素,但是是以自定义方式打印的。 编译代码时,出现以下情况: 我的代码:在PROLOG中写入时不打印变量值,prolog,Prolog,我试图在屏幕上打印列表中的元素,但是是以自定义方式打印的。 编译代码时,出现以下情况: 我的代码: printTray([L0,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10]) :- nl, printLine(L0), print('---------+---+---+---+---+---+---+---+---+---'), nl, printLine(L1), print('---------+---+---+---+---+-
printTray([L0,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10]) :-
nl,
printLine(L0),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L1),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L2),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L3),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L4),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L5),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L6),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L7),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L8),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L9),
print('---------+---+---+---+---+---+---+---+---+---'), nl,
printLine(L10),
print('---------+---+---+---+---+---+---+---+---+---'), nl.
printLine([P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10]) :-
write(P0),
print(' '),
write(P1),
print(' | '),
write(P2),
print(' | '),
write(P3),
print(' | '),
write(P4),
print(' | '),
write(P5),
print(' | '),
write(P6),
print(' | '),
write(P7),
print(' | '),
write(P8),
print(' | '),
write(P9),
print(' | '),
write(P10),
print(' '),
nl.
printTray子句中的列表是纸盘的行。所以,对于每一行,我一个接一个地打印元素。
我不知道这是什么原因,我尝试了其他方法,但结果都是一样的。
当我将列表元素的值更改为变量值时,就会出现问题。也许您只需要将所有write/1替换为
vwrite(V) :- var(V) -> write(' ') ; write(V).
对代码进行一些重构会导致
printTray(Tray) :-
nl, maplist(printLine, Tray).
printLine([P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10]) :-
vwrite(P0),
write(' '),
maplist([P]>>(vwrite(P),write(' | ')), [P1,P2,P3,P4,P5,P6,P7,P8,P9]),
vwrite(P10),
writeln(' '),
writeln('---------+---+---+---+---+---+---+---+---+---').
vwrite(V) :- var(V) -> write(' ') ; write(V).
与此测试数据配对
tray([
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_],
[y,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,1,_,_],
[_,_,_,_,_,_,_,_,_,2,_],
[_,_,_,_,_,_,_,_,_,_,3],
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_]]).
屈服
?- tray(T), printTray(T).
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
y | | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | 1 | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | 2 |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | | 3
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
也许您只需要将所有write/1替换为以下实用程序
vwrite(V) :- var(V) -> write(' ') ; write(V).
对代码进行一些重构会导致
printTray(Tray) :-
nl, maplist(printLine, Tray).
printLine([P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10]) :-
vwrite(P0),
write(' '),
maplist([P]>>(vwrite(P),write(' | ')), [P1,P2,P3,P4,P5,P6,P7,P8,P9]),
vwrite(P10),
writeln(' '),
writeln('---------+---+---+---+---+---+---+---+---+---').
vwrite(V) :- var(V) -> write(' ') ; write(V).
与此测试数据配对
tray([
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_],
[y,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,1,_,_],
[_,_,_,_,_,_,_,_,_,2,_],
[_,_,_,_,_,_,_,_,_,_,3],
[_,_,_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,_,_,_,_,_,_]]).
屈服
?- tray(T), printTray(T).
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
y | | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | 1 | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | 2 |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | | 3
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
| | | | | | | | |
---------+---+---+---+---+---+---+---+---+---
调用打印托盘的代码在哪里?您是否尝试过使用或任何其他方法来确定变量未绑定的原因?您的变量都未绑定;您是如何使用这些关系的?您听说过迭代吗?它将为您节省大量的复制粘贴。调用
printTray
的代码在哪里?您是否尝试过使用或任何其他方法来确定变量未绑定的原因?您的变量都未绑定;您是如何使用这些关系的?您听说过迭代吗?它将为您节省大量的复制粘贴。