首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计数变化SICP

计数变化SICP
EN

Stack Overflow用户
提问于 2017-01-24 17:30:34
回答 1查看 247关注 0票数 0

我正在阅读SICP,遇到了一个问题,在第一章中有一个名为计数变化的例子,我需要在方案中编写一个程序,以计算在给定的半美元、25美分、10美分、5美分和1美分的情况下,对任何给定数字进行更改的可能数量。这本书展示了一种程序的替换模型,我试图将其改为嵌套模型,但失败了,有人能帮我一个忙吗?

代码语言:javascript
复制
(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))

执行结果如下:

代码语言:javascript
复制
;Ill-formed clause: 1
EN

回答 1

Stack Overflow用户

发布于 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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41824550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档