1

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

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.
4

2 回答 2

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 .
于 2013-11-03T17:54:24.420 回答
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).

它一次又一次地询问,直到输入字符s

于 2013-11-03T17:19:02.620 回答