Functional programming 使用结构中实例化的参数
我目前正在完成的第7章,并试图创造 spider结构的一个实例:Functional programming 使用结构中实例化的参数,functional-programming,scheme,racket,htdp,Functional Programming,Scheme,Racket,Htdp,我目前正在完成的第7章,并试图创造 spider结构的一个实例: #lang racket ;; spider-structure: structure -> ??? ;; defines a spider structure with two parameters: legs and volume (define-struct spider (legs volume)) ;; spidercheck: lambda -> num ;; creates a spider check
#lang racket
;; spider-structure: structure -> ???
;; defines a spider structure with two parameters: legs and volume
(define-struct spider (legs volume))
;; spidercheck: lambda -> num
;; creates a spider check function and determines volume based on legs
(define spidercheck
(lambda (legs)
(cond
((<= legs 4) 800)
((> legs 4) 1000))))
(define a-spider
(make-spider 4
(spidercheck ...
#朗球拍
;; 星形结构:结构->???
;; 使用两个参数定义星形结构:支腿和体积
(定义结构三脚架(体积))
;; 蜘蛛检查:lambda->num
;; 创建一个spider check函数,并根据支腿确定音量
(定义蜘蛛网检查
(lambda(腿)
(续)
((腿4)1000)))
(定义a-spider)
(制作蜘蛛4
(蜘蛛网)。。。
我的问题是,我想将编号从(make spider 4)
传递到a-spider
函数中的spidercheck
函数。我已经尝试过(spider legs a-spider)
,但它当然说它是在定义之前使用的。非常感谢您的帮助
谢谢!尝试使用
let
并以这种方式重复使用编号4
。
我不太确定这本书是如何处理蜘蛛的,但您可能需要以下模式:
(define a-spider
(let ([a-legs 4])
(make-spider a-legs (spidercheck a-legs))))
这个答案不如Oscar的答案,因为它对蜘蛛的腿数进行了硬编码。但它确实显示了一种多次引用某个值的方法。一个简单的解决方案是使用相同的参数调用
make spider
和spidercheck
,比如数字2
:
(define spiderman (make-spider 2 (spidercheck 2)))
一个更有趣的替代方法是定义一个新函数,该函数强制将相同的n
(支腿数)作为make spider
和spider check
的参数传递:
(define a-spider
(lambda (n)
(make-spider n (spidercheck n))))
现在,无论何时您想要创建一个spider,您都可以将支腿的数量指定为参数,并让spidercheck
负责计算体积。还请注意,您可以使用define
语法进一步简化上述代码段,该语法使lambda
隐式:
(define (a-spider n)
(make-spider n (spidercheck n)))
无论哪种方式,要创建新的spider(例如,使用8
legs),请执行以下操作:
你的答案更清晰了。+1是的,我刚刚注意到并修复了它。谢谢!非常感谢!这非常有效。这是一个如此简单但强大的解决方案。谢谢奥斯卡!虽然我不是昆虫学家,但你不想
(定义(蜘蛛?腿)(=腿8))
?;)@GregHendershott也有两条腿的蜘蛛。我想到了一个彼得·帕克:P
(define charlotte (a-spider 8))