考虑以下程序。它应该获取一个字符串列表,并返回一个字符串,其字符是每个字符串的第一个字符。例如,(downward (cons "caa" (cons "abbb" empty))
应该返回"ca"
. 为什么我不断收到错误消息?
(define (downward l)
(cond
[(empty? l) ""]
[else (substring (first l) 0 1
(downward (rest l)))]))
您正确地迭代了输入,但忘记将输出的每个部分“粘在一起”。在这种情况下,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")