【问题标题】:Creating an append function in Racket在 Racket 中创建附加函数
【发布时间】:2015-03-19 04:14:11
【问题描述】:

在 ISL 中,您将如何创建一个 递归 append 函数,该函数接受两个列表并返回第一个列表的所有最高位置元素的列表以及第二个列表的最高位置元素(不使用lambdaappend)?

基本上是一个适用于这些检查的函数:

(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))]))

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    比这简单得多。

    (define (append-test lhs rhs)
      (if (empty? lhs)
          rhs
          (cons (first lhs) (append-test (rest lhs) rhs))))
    

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 2017-02-21
      • 2012-08-23
      • 2020-06-02
      • 2012-01-05
      • 2020-04-09
      相关资源
      最近更新 更多