我目前正在学习在Prolog中编程,并正在进行一项涉及大小为n的世界的任务,并且根据用户想要移动它的位置拾取和移动3个块。我有一个程序的基本裸骨结构,但是,我遇到的问题是获取用户的输入,存储世界大小的整数并在整个程序中使用变量。我设法获得用户输入,但是当我在代码中的其他地方使用它时,值不是它应该是什么。
例如。如果我为n输入14,然后在position
子句输出大小,我得到World Size: _6324
而不是14.这似乎导致我的代码中的其他问题,我无法弄清楚如何解决这个问题。我做错了什么,怎么解决这个问题?另外,_6324
是什么意思?
这是初始代码,要求用户输入并输出当前数据集,包括世界大小:
%Setting world: world of lenght n, block size of 3
:-assert(at(a,0)).
:-assert(at(b,2)).
:-assert(at(c,5)).
%Gets the initial size of the world from the user
start :- write('What the world length?: '), read(Length),
assert(world_length(Length)), nl, position.
%outputs the initial positions of each block
position:- write("Initial Positions: "),nl,
write('World Size: '), write(Length),nl,
at(a,X), write(a), write(' is at position '), write(X),nl,
at(b,Y), write(b), write(' is at position '), write(Y),nl,
at(c,Z), write(c), write(' is at position '), write(Z),nl,nl,
write('Instructions: To move a block, simply type in move(block, position).'), nl.
答案 0 :(得分:1)
Length
谓词中的逻辑变量position/0
不知道Length
谓词中的逻辑变量start/0
是。< / p>
在Prolog中,没有动态嵌套的范围。
您可以通过调用assert(world_length(Length))
谓词中的start/0
将此值保存在动态数据库中,这样您就可以在position/0
内查询
write('World Size: '), world_length(Length), write(Length), nl, ...
没有查询,你拥有的是一个未初始化的,尚未设置的逻辑变量Length
,而_6432
(或_G12345
)是它的名字,即打印在这种情况下write
。意思是,&#34;没有价值&#34; 。