2017-11-27 8 views
0

私はラケットを初めて使います。私はループを使ってリストのリストを返そうとしています。コードは機能しますが、他の条件を評価せずに要素の1つだけを3回印刷し、重複を招きます。どのように各条件をループし、重複なく各条件に対して1つの要素を印刷することができますか?ループを使用してリストを返す

(define position_                                
    (lambda 
     (list_) 
    (let ([size 3]) ; 
     (for/list ([binary (in-range 0 size)]) 
     (cond [(not (empty? list_)) 
       (cond((list-ref list_ 0) (cond ((equal? (list-ref list_ 0) 1) (list (vector-ref Table 0) HIGH)) ((equal? (list-ref list_ 0) 0) (list (vector-ref Table 0) LOW))))     
        ((list-ref list_ 1) (cond ((equal? (list-ref list_ 1) 1) (list (vector-ref Table 1) HIGH)) ((equal? (list-ref list_ 1) 0) (list (vector-ref Table 1) LOW)))) 
        ((list-ref list_ 2) (cond ((equal? (list-ref list_ 2) 1) (list (vector-ref Table 2) HIGH)) ((equal? (list-ref list_ 2) 0) (list (vector-ref Table 2) LOW)))) 
       )]) 
     )))) 

答えて

4

あなたcondしか1項を持っています。

(cond [(not (empty? list_)) ...] 
     [else 'pigs-are-flying]) ; what happens when the list is not empty 

さて結果pigs-are-flyingが唯一の私の提案である:それはあなたがこのようなものを作っていることを意味します。真実は、レポートが具体的にそれを指定していないということです。それはすべてが行くことを意味します。

また、condはSchemeのif-elseif-elseであることを知っているので、ネスティングcondはめったに必要ありません。

(cond [p1 c1] 
     [else (cond [p2 c2] 
        [else a2])]) 

を書くためだけのハードな方法です:

(cond [p1 c1] 
     [p2 c2] 
     [else a2]) 

そして、あなたがしたい場合:

(cond [p1 
     (cond [p2 c2] 
      [else a2])] 
     [else a1]) 

あなたは同じフラットを取得するために述語を否定することができ、このようなコード行動:

(cond [(not p1) a1] 
     [p2 c2] 
     [else a2]) 

スタイルコメントとして。終了括弧は決してそれ自身の行にあるべきではありません。前の行の友人と一緒にいなければなりません。それは人間が読んだ識別であり、noeはカッコです。 DrRacketはそれをあなたのために行うので、悪い習慣を採用する必要はありません。

+0

に動作しますはい、私は、ネスティングがケースかもしれない疑いがある病気のコードを調整し、それが動作するかどうかを確認 –

+0

また、 'p2'は' p1'が偽であると評価するだけなので、 '(and(not p1)p2)'を実際に意味することも知っています。したがって、「cond」では、結果表現という用語のうちの1つのみが評価されます。 – Sylwester

0

私はロジックだけでなく、コードが機能するための構文を変更しなければならなかった、それにもかかわらず、それは今完全に

(define position_                                
    (lambda 
     (list_) 
    (let ([size (length list_) ]) ; 
     (for/list ([binary (in-range 0 size)]) 
     (cond [(not (empty? list_)) 
       (cond[ (equal? binary 0) (if (equal? (list-ref list_ binary) 1) (list (vector-ref Table 0) HIGH) (list (vector-ref Table 0) LOW))] 
        [ (equal? binary 1) (if (equal? (list-ref list_ binary) 1) (list (vector-ref Table 1) HIGH) (list (vector-ref Table 1) LOW))] 
        [ (equal? binary 2) (if (equal? (list-ref list_ binary) 1) (list (vector-ref Table 2) HIGH) (list (vector-ref Table 2) LOW))] 

        ) 
       ] 
       )) 
     ))) 
関連する問題