Racket 定义球拍中的拉链功能

Racket 定义球拍中的拉链功能,racket,Racket,我很难定义一个功能,可以做同样的功能拉链在球拍。到目前为止,我有: (define (zipper lst1 lst2) (match* [lst1 lst2] [{'()'()} '()] [{(cons hd1 tl1) (cons hd2 tl2)} (cons (list hd1 d2) (zipper tl1 tl2))])) 有人能解释一下我哪里出了问题吗。我希望它看起来像这样: > (zipper '(1 2 3 4)

我很难定义一个功能,可以做同样的功能拉链在球拍。到目前为止,我有:

(define (zipper lst1 lst2)
  (match* [lst1 lst2]
    [{'()'()} '()]
    [{(cons hd1 tl1) (cons hd2 tl2)}
      (cons (list hd1 d2)
            (zipper tl1 tl2))]))
有人能解释一下我哪里出了问题吗。我希望它看起来像这样:

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

您可以将
map
list
结合使用来实现此功能

> (map list '(1 2 3 4) '(a b c d))
'((1 a) (2 b) (3 c) (4 d))
所以,如果你想把它做成一个单功能拉链,它看起来会像:

(define (zipper . args)
  (apply map list args))
此功能的工作原理与地图列表的工作原理相同:

> (zipper '(1 2 3 4) '(a b c d))
'((1 a) (2 b) (3 c) (4 d))
你很接近:

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

我把
d2
改为
hd2

你想让拉链的功能做什么?@Majora320I想让拉链做这个(拉链)(1 2 3 4)“a b c d”)((1 a)(2 b)(3 c)(4 d))。我意识到这有点晚了,但是请你解释一下
拉链的定义中做了什么。我对球拍还不熟悉,我正努力尽可能多地学习。谢谢