2016-07-06 12 views
3

Ich habe Probleme, eine Funktion zu definieren, die dieselben Funktionen wie Reißverschluss in Racket ausführen kann. Bisher habe ich das:Definieren Sie die Reißverschlussfunktion im Racket

(define (zipper lst1 lst2) 
    (match* [lst1 lst2] 
    [{'()'()} '()] 
    [{(cons hd1 tl1) (cons hd2 tl2)} 
     (cons (list hd1 d2) 
      (zipper tl1 tl2))])) 

Kann mir jemand erklären, wo ich hier falsch liege. Ich mag es so aussehen:

> (zipper '(1 2 3 4) '(a b c d)) 
'((1 a) (2 b) (3 c) (4 d)) 
+0

Was soll die Funktion 'Zipper'? – Majora320

+0

@ Majora320 Ich möchte den Reißverschluss dies tun> (Reißverschluss '(1 2 3 4)' (a b c d)) '((1 a) (2 b) (3 c) (4 d)). – tadashi

Antwort

5

Sie map mit list kombiniert verwenden können, um diese Funktionalität zu haben.

> (map list '(1 2 3 4) '(a b c d)) 
'((1 a) (2 b) (3 c) (4 d)) 

Also, wenn Sie es eine einzige Funktion Reißverschluss machen wollen, wäre es etwas wie folgt aussehen:

(define (zipper . args) 
    (apply map list args)) 

Diese Funktion ist die gleiche wie map list:

> (zipper '(1 2 3 4) '(a b c d)) 
'((1 a) (2 b) (3 c) (4 d)) 
3

Sie waren ziemlich nah:

(define (zipper lst1 lst2) 
    (match* [lst1 lst2] 
    [{'() '()} '()] 
    [{(cons hd1 tl1) (cons hd2 tl2)} 
    (cons (list hd1 hd2) 
      (zipper tl1 tl2))])) 

Ich habe d2 zu hd2 geändert.