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))。我意识到这有点晚了,但是请你解释一下
在拉链的定义中做了什么。我对球拍还不熟悉,我正努力尽可能多地学习。谢谢