我正在阅读SICP,遇到了一个问题,在第一章中有一个名为计数变化的例子,我需要在方案中编写一个程序,以计算在给定的半美元、25美分、10美分、5美分和1美分的情况下,对任何给定数字进行更改的可能数量。这本书展示了一种程序的替换模型,我试图将其改为嵌套模型,但失败了,有人能帮我一个忙吗?
(define (count_change total_amount)
(define (denomination kinds_of_coins)
(cond ((= kinds_of_coins 5) 50)
((= kinds_of_coins 4) 25)
((= kinds_of_coins 3) 10)
((= kinds_of_coins 2) 5)
((= kinds_of_coins 1) 1)))
(define (cc amount kinds_of_coins)
(cond (= amount 0) 1)
((or (< amount 0) (= kinds_of_coins 0)) 0)
(else (+ (cc amount (- kinds_of_coins 1))
(cc (- amount (denomination kinds_of_coins)) kinds_of_coins))))
(cc total_amount 5))执行结果如下:
;Ill-formed clause: 1发布于 2017-01-24 20:19:49
cond表达式通常采用(cond (predicate expr) ... (else expr))或(cond (predicate expr) ... (#t expr))的形式。只要谓词的计算结果为true,子句中对应的表达式就是条件表达式的结果。如果在结尾处没有else/#t谓词,并且条件表达式上的所有谓词都为false,则表达式通常会返回一个空值。
在这里,你有一个语法错误,因为你没有正确地开始一个子句。因此,您应该使用(cond ((= amount 0) 1) ...)而不是(cond (= amount 0) 1)。
https://stackoverflow.com/questions/41824550
复制相似问题