2011-01-02 1 views
2

Wie kann ich diese mit cons erstellte Liste in einen Vektor ändern?Scheme: Wie kann ich eine Liste mit Widerständen in einen Vektor ändern?

((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)) 

Dies ist mein Code:

 
(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))) 

Antwort

5

Verwenden Sie die list->vector Funktion auf der gesamten Liste und dann auf jedem sublist vector-map verwenden.

Oder alternativ zuerst map verwenden, um list->vector auf jede Unterliste anzuwenden und dann list->vector auf der gesamten Liste verwenden.

+1

Oder andersherum, '(Liste-> Vektor (Kartenliste-> Vektorzeilen))', wäre viel konsistenter. :-) –

+0

@Chris: Konsequent mit was? Soweit ich sagen kann, gibt es keine wesentlichen Vorteile im Vergleich zu den anderen. – sepp2k

+0

Konsequent, dass Sie "list-> vector" an beiden Orten verwenden, nicht "list-> vector" plus "vector-map". :-) Es ist eine Kleinigkeit, aber genau das, was mir auffällt. –

0

Ist das, was von Ihnen denken?

#(#(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

ja, und ich habe beide Vorschläge verwendet, danke für die schnelle, korrekte und nützliche Antwort. Ich bin kein Experte für Schema oder Programmierung, aber eine konsistente Funktion ist nicht, wer mehr Effizienz hat, in diesem Fall sollte es das Fasten sein? – gn66

+0

Ich habe meinen Code in der Frage hinzugefügt ... – gn66