2013-11-03 46 views
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. 

回答

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 . 
+0

消息,每當用戶輸入錯誤的字符時,他應該看到消息「該字符無效,輸入一個有效的字符」。那剪輯是紅色的?我怎樣才能在這個謂詞中使用綠色切割?是否有可能不使用重複謂詞? – user2880113

+0

請嘗試自己...... – CapelliC

+0

我一直在這個小時,並找不到解決方案! – user2880113

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中鍵入。

+0

askChar(X)應該返回通過測試的字符。必須有兩個被接受的字符,而不僅僅是s。每次用戶輸入一個錯誤的字符時,他應該看到「該字符無效,輸入另一個字符」 – user2880113