关于一个小程序

时间:2013-09-24 04:05:12

标签: scheme racket

考虑以下计划。它应该采用字符串列表,并返回一个字符串,其字符是每个字符串中的第一个字符。例如,(downward (cons "caa" (cons "abbb" empty))应该返回"ca"。为什么我一直收到错误?

(define (downward l)
  (cond
    [(empty? l) ""]
    [else (substring (first l) 0 1
            (downward (rest l)))]))

1 个答案:

答案 0 :(得分:3)

您正在迭代输入,但忘记将输出的每个部分“粘在一起”。在这种情况下,string-append将允许您将答案的所有元素组合在一起:

(define (downward l)
  (cond
    [(empty? l) ""]
    [else (string-append (substring (first l) 0 1)
                         (downward (rest l)))]))

这是它的工作原理:

(downward '("caa" "abbb"))
=> "ca"

第二个想法,问题有点含糊不清。你想要字符串作为输出吗?还是列表?如果它是一个列表,您只需要更改基本案例和“粘贴”过程 - 使用cons构建列表,就像string-append对于构建字符串一样:

(define (downward l)
  (cond
    [(empty? l) empty]
    [else (cons (substring (first l) 0 1)
                (downward (rest l)))]))


(downward '("caa" "abbb"))
=> '("c" "a")