2

考虑以下程序。它应该获取一个字符串列表,并返回一个字符串,其字符是每个字符串的第一个字符。例如,(downward (cons "caa" (cons "abbb" empty))应该返回"ca". 为什么我不断收到错误消息?

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

1 回答 1

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")
于 2013-09-24T04:10:59.340 回答