Prolog-重复输入,直到

时间:2013-11-03 16:46:16

标签: prolog repeat

我想创建一个仅接受来自用户的特定输入的谓词,如果用户输入错误,它将继续询问正确的输入。 我已经创建了这个,但它没有完成,因为它没有要求新输入,如果它错了:

askchar(X):- write('give char'),nl, get_char(X), test(X).

test(X):- X=a, write('ok'). %accepts a
test(X):- X='1', write('ok'). %accepts 1
test(X):- write('wrong input. try again'),nl.

2 个答案:

答案 0 :(得分:2)

在缺乏适当的尾递归优化的系统中,处理副作用可以通过故障驱动循环方便地完成

1 ?- [user].
|: askchar(C) :- repeat, get(C), (C = 0'a ; C = 0'1, ! ; fail).
% user://1 compiled 0.07 sec, 2 clauses
true.

2 ?- askchar(X).
|: 5
|: a

X = 97 .

答案 1 :(得分:1)

这是我得到的:

askChar(Char) :- get_char(Char), test(Char), write('This is the right char, thank you.'), !.
askChar(Char) :- write('That is wrong char!'), askChar(Char).    

test(s).

它会一次又一次地询问,直到键入char s为止。