2010-11-23 6 views
10

キーボードからのユーザ入力を読み取るClojureプログラム用の関数を書いています。ユーザーが無効な入力を入力すると、ユーザーには警告が表示され、再度プロンプトが表示されます。Clojureでキーボードからユーザー入力を読み込むためのLispyの方法は?

while 1: 
    value = input("What is your decision?") 
    if validated(value): 
     break 
    else: 
     print "That is not valid." 

私はClojureの中を考え出すことができる最善のはこれです:

(loop [value (do 
       (println "What is your decision?") 
       (read-line))] 
    (if (validated value) 
    value 
    (recur (do 
      (println "That is not valid.") 
      (println "What is your decision?") 
      (read-line))))) 

これは動作しますが、それはPythonのような言語での手続きのスタイルを使用している場合、私はこのような何かをするだろう冗長であり、冗長であるようです。これを行うにはもっとLispy/Clojureyの方法がありますか? GET-line関数へのprintln /読出しラインをコンボアウト

答えて

21
(defn input [] 
    (println "What is your decision?") 
    (if-let [v (valid? (read-line))] 
     v 
     (do 
     (println "That is not valid") 
     (recur))) 
8

ファクタ:

(defn get-input [prompt] 
    (println prompt) 
    (read-line)) 

(defn get-validated-input [] 
    (loop [input (get-input "What is your decision?")] 
    (if (valid? input) 
     value 
     (recur (get-input "That is not valid.\nWhat is your decision?"))))) 

これは基本的にあなたのPythonのバージョンが何をするかです。違いは、get-inputがPythonのために組み込まれていることです。

関連する問題