2017-04-20 9 views
1

スキーム内の複数の条件if文を正しく作成する方法の概念を理解するのに問題があります。例では、私は精通していますほとんどのプログラミング言語でスキーム内の複数の条件

if(a>b && b<c){ action; }

ようなものになるだろうが、これはスキームに骨の折れる作業を証明しています。私はまだ、リストの車は0より大きく、CADRが0未満であれば、私はそれが特定のアクションをしたいと言っしようとしていますCONDコードの最初の行で

(define (my-list-ref lst) 
    (cond (and((>(car lst)0) (<(cadr lst)0)) 
      ((+ n 1)(my-list-ref (cdr list))) 
      (and((<(car lst)0) (>(cadr lst)0))) 
      (zero? car lst) 
      (my-list-ref(cdr lst)) 
      (null? lst) 
      (display n)))) 

私はand演算子の構文エラーが間違っています。私は深く混乱している、説明を非常に感謝します。

答えて

2

このようなcond作品の構文:私は角括弧を使用しています

(cond 
    [question1 expression1] 
    [question2 expression2] 
    [question3 expression3] 
    [else  expression4]) 

注意。 Schemeでは大括弧と通常の括弧は同じ意味です。角括弧を使用すると、グループ分けを見るほうが簡単です。

あなたの例では、このようなものになり:ここ

(define (my-list-ref lst) 
    (cond 
    [(and (> (car lst) 0) (< (cadr lst) 0)) (my-list-ref (cdr list))] 
    [(and (< (car lst) 0) (> (cadr lst) 0)) some-action-here] 
    [(zero? car lst)       (my-list-ref(cdr lst))])) 

なお、このようなand作品の構文:

(and expression1 expression2) 

ですから、(> (car lst) 0)(< (cadr lst) 0)かどうか、同じ型でチェックしたいとき、コンディション質問は(and (> (car lst) 0) (< (cadr lst) 0))になります。

+0

何らかの理由で、大括弧[]の代わりに()を使用した例がたくさんありました。ありがとうございました。 – user2738052

+0

カッコと大括弧はラケットでは同等です。それらを使用して視覚的なコントラストを提供する。 –