我是Prolog的新手,我在菜单中遇到循环编号的问题。
以下是编码:
la3:-nl,
write('-------MENU-------'),nl,
write('1. Biodata'),nl,
write('2. Looping Number'),nl,
write('3. Exit'),nl,
write('Choose : '),read(Z),
(
Z=1,nl,
write('BIODATA'),nl,
write('Input your name : '),read(J),nl,
write('Input your Identity number : '),read(K),nl,
write('Input your class : '),read(L),nl,
write('---------------------'),nl,
write('Name : '),write(J),nl,
write('Identity number : '),write(K),nl,
write('Class : '),write(L),nl,
la3;
Z=2,nl,
write('LOOPING NUMBER'),nl,
loop(0),
loop(N):-N>0,write('Value : '),write(N),nl,
M is N-1,loop(M),
la3;
Z=3,nl,
write('EXIT'),nl
).
我不知道如何进行循环,上面的代码不起作用。
答案 0 :(得分:1)
Prolog与其他语言共有的少数事情之一就是最好以模块化方式思考。看起来你试图在一个谓词子句中捕获所有功能,这是一个笨拙和糟糕的结构。
首先启动顶级菜单。这是基于Prolog中常见的简单循环模式:repeat, ..., fail
。
main :-
repeat,
write('-------MENU-------'), nl,
write('1. Biodata'), nl,
write('2. Looping Number'), nl,
write('3. Exit'), nl,
write('Choose : '),
read(Z),
( Z = 3 -> !, fail ; true ), % fail without backtrack if Z = 3
action_for(Z),
fail.
然后您可以使用action_for/1
。这是action_for/1
的存根:
action_for(X) :-
write('Action for '),
write(X), nl.
当你执行它时,你会得到这个:
| ?- main.
-------MENU-------
1. Biodata
2. Looping Number
3. Exit
Choose : 1.
Action for 1
-------MENU-------
1. Biodata
2. Looping Number
3. Exit
Choose : 2.
Action for 2
-------MENU-------
1. Biodata
2. Looping Number
3. Exit
Choose : 3.
no
| ?-
因此基本的循环和菜单行为已经到位。
我将正确实施action_for/1
作为练习。