;; An ATOM is one of:
;; -- Symbol
;; -- String
;; -- Number
;; An SEXP (S-expression) is one of:
;; -- empty
;; -- (cons ATOM SEXP)
;; -- (cons SEXP SEXP)
所以我想總結所有的數字在SEXP!這裏是我的代碼,計劃你如何總結列表中的數字當你有結構和列表清單
;; sum-numbers: sexp -> Number
(define (sum-numbers sexp)
(cond
[(empty? sexp) 0]
[(ATOM? (first sexp)) (+ (atom-sum-numbers (first sexp))
(sum-numbers (rest sexp)))]
[(SEXP? (first sexp)) (+ (sum-numbers (first sexp))
(sum-numbers (rest sexp)))]))
;; atom-sum-numbers: Atom -> Number
(define (atom-sum-numbers a)
(cond
[(symbol? a) 0]
[(number? a) (+ (ATOM-number a)
(atom-sum-numbers a))]
[(string? a) 0]))
然而,一個錯誤說cond
:所有問題的結果都是假的。我想知道那裏發生了什麼。
看看[文檔](http://docs.racket-lang.org/reference/define-struct.html)。當你寫'(define-struct ATOM(symbol string number))'時,你說'ATOM'是三個元素的組合:一個符號,一個字符串和一個數字 - 不只是其中的一個! – 2014-11-05 01:18:42
@ÓscarLópezOP似乎想要的東西類似於C的工會。我不知道是否有計劃實施支持工會,這似乎記憶不安全。當然,靜態類型語言具有代數數據類型的概念,但是這不適用於Scheme。 – 2014-11-05 04:15:55