我在定义一个与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)
您可以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)