Functional programming 方案检查期望输出记录与记录程序相结合

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 ->

我目前正在scheme中编程,我已经编写了以下记录程序,用德语记录了一种生物=kreatur,其特征是:力量=stärke,知识=wissen,准备承担风险=risikobereitschaft,我定义了两种生物,分别名为ronugor和garnolaf。名称不是我的主意,这是我没有想到的一个练习;然后我写了一个程序,把这两种生物的性格特征混合在一起,强度为5%,知识不变,愿意承担风险,接受一种新的生物,名为ronulaf

这是我的代码:

    (: 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,这样当记录中的值不精确时,即使它们的值不精确相等,它也有一些不精确的东西?它实际上与不精确的值有关-这也是我所想的。我试了一下你说的话,改为“检查内部”,效果很好。非常感谢。