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 に答える