Functional programming 方案检查期望输出记录与记录程序相结合
我目前正在scheme中编程,我已经编写了以下记录程序,用德语记录了一种生物=kreatur,其特征是:力量=stärke,知识=wissen,准备承担风险=risikobereitschaft,我定义了两种生物,分别名为ronugor和garnolaf。名称不是我的主意,这是我没有想到的一个练习;然后我写了一个程序,把这两种生物的性格特征混合在一起,强度为5%,知识不变,愿意承担风险,接受一种新的生物,名为ronulaf 这是我的代码:Functional programming 方案检查期望输出记录与记录程序相结合,functional-programming,scheme,racket,record,Functional Programming,Scheme,Racket,Record,我目前正在scheme中编程,我已经编写了以下记录程序,用德语记录了一种生物=kreatur,其特征是:力量=stärke,知识=wissen,准备承担风险=risikobereitschaft,我定义了两种生物,分别名为ronugor和garnolaf。名称不是我的主意,这是我没有想到的一个练习;然后我写了一个程序,把这两种生物的性格特征混合在一起,强度为5%,知识不变,愿意承担风险,接受一种新的生物,名为ronulaf 这是我的代码: (: stärke (kreatur ->
(: stärke (kreatur -> number))
(: wissen (kreatur -> number))
(: risikobereitschaft (kreatur -> number))
(define-record-procedures kreatur
make-kreatur
kreatur?
(stärke
wissen
risikobereitschaft))
; check-property (i kept this out of the posted code to shorten it)
;define the creatures garnolaf and ronugor
(: make-kreatur (number number number -> kreatur))
(define garnolaf
(make-kreatur 100 0 0))
(: make-kreatur (number number number -> kreatur))
(define ronugor
(make-kreatur 0 100 0))
;signaturen
(: garnolaf? (kreatur -> boolean))
(check-expect (garnolaf? garnolaf) #t)
(check-expect (garnolaf? ronugor) #f)
(define garnolaf?
(lambda (x)
(and (= (stärke x) 100)
(= (wissen x) 0)
(= (risikobereitschaft x) 0))))
(: ronugor? (kreatur -> boolean))
(check-expect (ronugor? garnolaf) #f)
(check-expect (ronugor? ronugor) #t)
(define ronugor?
(lambda (x)
(and (= (stärke x) 0)
(= (wissen x) 100)
(= (risikobereitschaft x) 0))))
;mixing of the creatures
(: ronulaf (kreatur kreatur -> kreatur))
;this is where i am missing a check-expect, i suppose
(define ronulaf
(lambda (r g)
(make-kreatur (* 0.95 (stärke g))
(wissen r)
0)))
我现在的问题是如何为ronulaf程序编写一个检查。我会这样写:
(check-expect (ronulaf ronugor garnolaf) #<record:kreatur 95.0 100 0>)
但它不起作用。有人对支票有更好的想法吗
已经谢谢你了!
伊娃注意到你的garnolaf怎么样了吗?罗努格呢?程序是如何编写的?现在为ronulaf写一些类似的东西。就这样 试试这个:
(check-expect (ronulaf ronugor garnolaf) (make-kreatur 95 100 0))
并非所有的对象表示都可以输入到read并成为该对象首先,感谢您的回答:但是,如果我尝试收到以下错误:check expect遇到了以下错误,而不是预期值。正如我在上面的帖子中所说,这也不起作用……你确定你使用的是DeinProgramm中的正确语言吗?在一种你可能会用到的语言中,我正在使用DeinProgramm,Die Macht der Abstraktion-Anfänger,它将被翻译成DeinProgramm,抽象的力量-初学者。这是DeinProgramm下的第一个选项。我不知道这是否是正确的语言,但这是我们在大学里必须使用的语言……这是正确的语言。我想我已经发现了您的问题:检查expect make kreatur 95.0 100 0 make kreatur 95.0 100 0失败。这可能是check expect的问题。选中expect make kreatur 95 100 0 make kreatur/*100 95 100 100 0 0 Pass,这样当记录中的值不精确时,即使它们的值不精确相等,它也有一些不精确的东西?它实际上与不精确的值有关-这也是我所想的。我试了一下你说的话,改为“检查内部”,效果很好。非常感谢。