2010-05-10 45 views
0
;; structure representing homework points 
;; nr: number - the number of the homework 
;; points: number - the number of points reached 
(define-struct homework (nr points)) 



;; parse-homework: (list of number pairs) -> (list of homework) 
;; The procedure takes a list of number pairs and produces a list of homework  structures 
;; Example: (parse-homework (list (list 1 6) (list 2 7) (list 3 0))) should produce (list (make-homework 1 6) (make-homework 2 7) (make-homework 3 0)) 

(define (parse-homework homework-entries) 
    (if (and (= (length (first homework-entries) 2))(= (length (parse-homework (rest homework-entries)) 2))) 
    (make-homework (first homework-entries) (parse-homework (rest homework-entries))) 
    (error 'Non-valid-input "entered list is not of length two")) 

)   


(parse-homework (list (list 1 6) (list 2 7) (list 3 0))) 

此代碼將產生錯誤長度的結構:預計1個參數,給定2:(列表1 6)2解析的列表和產生的該

我真正體會每解釋,即可以給我得到在該方案中,東西...

非常感謝您

+0

感謝德克我要去嘗試了這一點,我很困惑與括號的方案^^ – qzar 2010-05-10 15:47:23

回答

1

你的括號是錯誤的(見下文)

(define (parse-homework homework-entries) 
    (if (and (= (length (first homework-entries) 2)) ;; <---- Parens wrong here 
      (= (length (parse-homework (rest homework-entries)) 2))) ;; <---- ... and here 
    (make-homework (first homework-entries) (parse-homework (rest homework-entries))) 
    (error 'Non-valid-input "entered list is not of length two")) 

)  

你需要調用length功能與一體,=函數有兩個參數:

(= (length (first homework-entries)) 2) 
同樣對於其他標記線

編輯當你解析家庭作業的列表,可以考慮:

  • 當你解析的homework-entries所有元素?也就是說,您何時必須停止遞歸? (null?)錯誤說明了一切:輸入列表已用盡。
  • 根據您的示例將parse-homework應用於項目列表的預期結果是什麼?你實際上並沒有產生有意義的結果。

嘗試將問題分解成更小的部分:

(define (parse-homework-item item) 
    ;; Parse a single homework item, returning an instance of the 
    ;; Homework type for it. 
    ...) 

(define (parse-homework list-of-items) 
    ;; Loop over the elements of list-of-items, processing each in turn 
    ;; using parse-homework-item. Collect each result object into a list 
    ;; which is returned as final result. 
    ...) 
+0

這個巨大的數量現在,我解決了括號,他給了我另一個錯誤:第一:預計參數鍵入<非空列表>;給空的,我認爲代碼的邏輯必須是錯的,但我無法得到它... – qzar 2010-05-10 16:07:23

0
;; structure representing homework points 
;; nr: number - the number of the homework 
;; points: number - the number of points reached 
(define-struct homework (nr points)) 


;; parse-homework: (list of number pairs) -> (list of homework) 
;; The procedure takes a list of number pairs and produces a list of homework structures 
;; Example: (parse-homework (list (list 1 6) (list 2 7) (list 3 0))) should produce (list (make-homework 1 6) (make-homework 2 7) (make-homework 3 0)) 
(define (parse-homework homework-entries) 
    (if (and (= (length (first homework-entries)) 2) 
      (= (length (parse-homework (rest homework-entries)) 2))) 
    (make-homework (first homework-entries) (parse-homework (rest homework-entries))) 
    (error 'Non-valid-input "entered list is not of length two")) 

)   


(parse-homework (list (list 1 6) (list 2 7) (list 3 0)))  

現在我得到錯誤:第一:預計類型非空列表的說法;鑑於空

代碼HAST是完全錯誤的,我認爲,但在這一刻,我沒有其他的解決方案...

希望你能給我一些提示!

謝謝