2013-09-24 50 views
2

請考慮以下程序。它應該帶有一個字符串列表,並返回一個字符串,其字符是每個字符串中的第一個字符。例如,(downward (cons "caa" (cons "abbb" empty))應返回"ca"。爲什麼我不斷收到錯誤?關於一個小程序

(define (downward l) 
    (cond 
    [(empty? l) ""] 
    [else (substring (first l) 0 1 
      (downward (rest l)))])) 
+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") 
+0

第一個是我正在尋找的。謝謝。 – Josh