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