在Racket中定义拉链功能

tad*_*shi 3 racket

我在定义一个与Racket中的拉链功能相同的功能时遇到了麻烦.到目前为止我有这个:

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

谁能解释我在哪里出错了.我希望它看起来像这样:

> (zipper '(1 2 3 4) '(a b c d))
'((1 a) (2 b) (3 c) (4 d))
Run Code Online (Sandbox Code Playgroud)

Lei*_*sen 5

您可以map结合使用list以获得此功能.

> (map list '(1 2 3 4) '(a b c d))
'((1 a) (2 b) (3 c) (4 d))
Run Code Online (Sandbox Code Playgroud)

所以,如果你想让它成为单个功能拉链,它看起来像:

(define (zipper . args)
  (apply map list args))
Run Code Online (Sandbox Code Playgroud)

此功能的作用与map list:

> (zipper '(1 2 3 4) '(a b c d))
'((1 a) (2 b) (3 c) (4 d))
Run Code Online (Sandbox Code Playgroud)