;; 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