2016-10-31 4 views
0

たとえば、私は次のコードを持っています。変数v1を定義し、次にv1という値をチェックします。 v1 == 1の場合は(print-list q2)にして、別の入力を読み込んでv2に保存してください。(define v2 (read))です。condの中に複数のステートメントを使用するには?

(define v1 (read)) 
(cond 
    [(null? v1) (printf "No input..\n")] 
    [(= v1 1) (print-list q2)] 

上記のソリューションはどのように達成できますか?あなたはcondの条件の後に複数の式を書くことができます

答えて

1

:もちろん

(define v1 (read)) 

(cond 
    [(null? v1) (printf "No input..\n")] 
    [(= v1 1) 
    (define v2 (read)) 
    (print-list q2)] 
    [else (error "Unexpected value")]) 

print-listq2が以前に定義されていた場合は、上記にのみ動作しますが、それは何の一般的な考えを示していますやってみたいです。条件の後のすべての式は順番に実行されますが、最後の式の値のみが返されます(この例では(print-list q2))。

+0

はい 'プリント-list'と' q2'は、事前に定義されています。ありがとう。 – Bun

+1

@Bun 'v2'のスコープは' cond'項内にのみ存在し、 'define'は既存の変数を変更しないので、あなたが望むことができないことに注意してください。 'set!'が変更されます。 – Sylwester

0

1つはまた、繰り返し読むために再帰を使用することができます。

(define (f) 
    (let loop ((v (read))) 
    (cond [(= 0 v) "End."] 
      [(= 1 v) (println '(a b c))] 
      ; [.. other options ..] 
      [else 
      (println '(1 2 3)) 
      (loop (read))]))) 

テスト:

(f) 

1 
'(a b c) 
0 
"End." 
> 
関連する問題