菜单序言中的循环数

时间:2017-10-19 17:39:31

标签: prolog

我是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
    ).

我不知道如何进行循环,上面的代码不起作用。

1 个答案:

答案 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作为练习。