在 Racket 中创建附加函数
Creating an append function in Racket
在 ISL 中,您将如何创建一个 递归 append
函数,它接受两个列表和 returns 第一个的所有最高位置元素的列表列出第二个列表的最高位置元素(不使用 lambda
或 append
)?
基本上,一个适用于这些检查的函数期望:
(check-expect (append-test '(a b c) '(d e f g h)) (list 'a 'b 'c 'd 'e 'f 'g 'h))
(check-expect (append-test '() '(7 2 0 1 8 3 4)) (list 7 2 0 1 8 3 4))
我觉得它肯定会使用 map
,因为这是我们最近一直关注的。这是我所拥有的,确实有效,但我想知道是否有一种方法可以使用 map、foldr、foldl、filter 或类似的东西来简化它。
这是我目前的情况:
(define (append-test lst1 lst2)
(cond
[(and (empty? lst1)(empty? lst2)) '()]
[(empty? lst1) lst2]
[(empty? lst2) lst1]
[else (cons (first (first (list lst1 lst2)))
(append-test (rest lst1) lst2))]))
比那个简单多了
(define (append-test lhs rhs)
(if (empty? lhs)
rhs
(cons (first lhs) (append-test (rest lhs) rhs))))
在 ISL 中,您将如何创建一个 递归 append
函数,它接受两个列表和 returns 第一个的所有最高位置元素的列表列出第二个列表的最高位置元素(不使用 lambda
或 append
)?
基本上,一个适用于这些检查的函数期望:
(check-expect (append-test '(a b c) '(d e f g h)) (list 'a 'b 'c 'd 'e 'f 'g 'h))
(check-expect (append-test '() '(7 2 0 1 8 3 4)) (list 7 2 0 1 8 3 4))
我觉得它肯定会使用 map
,因为这是我们最近一直关注的。这是我所拥有的,确实有效,但我想知道是否有一种方法可以使用 map、foldr、foldl、filter 或类似的东西来简化它。
这是我目前的情况:
(define (append-test lst1 lst2)
(cond
[(and (empty? lst1)(empty? lst2)) '()]
[(empty? lst1) lst2]
[(empty? lst2) lst1]
[else (cons (first (first (list lst1 lst2)))
(append-test (rest lst1) lst2))]))
比那个简单多了
(define (append-test lhs rhs)
(if (empty? lhs)
rhs
(cons (first lhs) (append-test (rest lhs) rhs))))