首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编写通用的“拆分”函数(用于SICP的假想语言)

编写通用的“拆分”函数(用于SICP的假想语言)
EN

Code Review用户
提问于 2011-04-15 02:37:44
回答 1查看 218关注 0票数 3

来自SICP 2.2.4

教科书已经定义了一个函数(右拆分.)如下所示:

(定义(右分割画家n) (if (= n0)画家(let ((较小(右拆分画家(- n1)(旁边是画家(较小)

他们已经表明有一个程序(上分裂)。有着相同的结构。

练习2.45。右拆分和上拆分可以表示为一般拆分操作的实例.定义一个过程拆分的属性(定义右拆分(在下面))(定义向上拆分(下面))产生过程的右拆分和上拆分,其行为与已经定义的过程相同。

我编写了以下函数,但我不确定测试它的最佳方法。你认为如何?

代码语言:javascript
运行
复制
(define (split step1 step2)
  (define (split-f painter n)
    (if (= n 0)
        painter
        (let ((smaller (split-f painter (- n 1))))
          (step2 (step1 smaller smaller)))))
  split-f)

(define right-split (split beside below))
(define up-split (split below beside))
EN

回答 1

Code Review用户

回答已采纳

发布于 2011-04-15 04:30:45

为了测试它,您需要对类似于下面和旁边的东西有定义。教科书代码中有一些奇怪的地方,因为画家的“更小”实际上并没有在代码中缩放,或者它是否表示“下面”和“旁边”缩放他们的论点?总之,你可以定义

代码语言:javascript
运行
复制
  (define (below a b) `(below ,a, b))
  (define (beside a b) `(beside ,a ,b))

因此,例如(右裂‘苹果1号)应该产生的结果。

代码语言:javascript
运行
复制
  '(beside apple (below apple apple))

您可以从代码的结构中验证代码是否正确工作。

你的(分裂)函数有一个错误,因为在您调用"step2“的行中缺少”油漆工“。代码应改为

代码语言:javascript
运行
复制
  (step2 painter (step1 smaller smaller))

否则对我来说很好。

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

https://codereview.stackexchange.com/questions/1895

复制
相关文章

相似问题

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