2011-01-02 4 views
2

consで作成されたこのリストをベクターに変更するにはどうすればよいですか?スキーム:どのようにして、consで作成されたリストをベクトルに変更できますか?

((p b p b p b p b) 
(b p b p b p b p) 
(p b p b p b p b) 
(b p b p b p b p) 
(p b p b p b p b) 
(b p b p b p b p) 
(p b p b p b p b) 
(b p b p b p b p)) 

これは私のコードです:

 
(define b "black") 
(define w "white") 

(define (board) 
    (letrec ((ti 
      (lambda (x) 
      (if (eq? x 8) '() 
      (cons (lh x 0) (ti (+ 1 x)))))) 
     (lh 
     (lambda (x y) 
      (if (eq? y 8) '() 
      (cons (if (odd? (+ x y)) 'b 'w) (lh x (+ 1 y))))))) 
    (ti 0))) 

答えて

5

全体リストにlist->vector関数を使用して、vector-mapを使用して、各サブリストに。

また、最初にmapを使用して、各サブリストにlist->vectorを適用してから、リスト全体でlist->vectorを使用してください。

+1

あるいは、 '(list-> vector(map list-> vector rows))'のように、はるかに一貫しています。 :-) –

+0

@Chris:何と一貫していますか?私がどちらの方法にも言えない限り、他のものと比較して重要な面がある。 – sepp2k

+0

'list-> vector'と' vector-map'ではなく、両方の場所で 'list-> vector'を使っています。 :-)それは非常にマイナーなことですが、私が気づくようなものです。 –

0

はあなたが考えている何本か?

#(#(p b p b p b p b) 
    #(b p b p b p b p) 
    #(p b p b p b p b) 
    #(b p b p b p b p) 
    #(p b p b p b p b) 
    #(b p b p b p b p) 
    #(p b p b p b p b) 
    #(b p b p b p b p)) 
+0

はい、私は両方の提案を使用しました。すばやく正確で有用な回答の両方に感謝します。私はスキームやプログラミングの専門家ではありませんが、一貫した機能は、より効率的なものではありません。この場合、それは断食されるべきですか? – gn66

+0

質問に私のコードを追加しました... – gn66

関連する問題