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 に答える