【问题标题】:about a small program关于一个小程序
【发布时间】:2013-09-24 22:35:31
【问题描述】:

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

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

【问题讨论】:

  • 我看到有一个可以接受的答案,但你能否包括你得到的实际错误。它可能会帮助将来的用户找到问题,它会帮助阅读答案的人知道实际问题是什么。

标签: scheme racket


【解决方案1】:

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

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

这就是它的工作原理:

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

再想一想,这个问题有点模棱两可。你想要一个 string 作为输出吗?还是一个列表?如果是列表,您只需更改基本情况和“粘贴”过程 - 使用 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")

【讨论】: