scheme check-expect输出记录与记录程序相结合

时间:2014-05-02 20:11:17

标签: functional-programming scheme racket record

我目前正在计划编程,我写了以下记录程序,记录了一个生物(德语中的kreatur),其中包括角色特征强度(=stärke),知识(= wissen)以及准备冒险( = risikobereitschaft),我定义了两个名为“ronugor”和“garnolaf”的生物(名字不是我的想法,它来自我没有提出的练习;))然后我写了一个程序来混合人物的性格特征这两个生物(强度-5%,知识不变,准备承担风险仍为0)接受一个名为“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>)

但它不起作用。有没有人对支票预期有更好的想法?

非常感谢! EVA

2 个答案:

答案 0 :(得分:0)

请注意您的garnolaf?ronugor?程序是如何编写的?现在为ronulaf写一些类似的内容。就是这样!

答案 1 :(得分:0)

试试这个:

 (check-expect (ronulaf ronugor garnolaf) (make-kreatur 95 100 0))

并非所有对象表示都可以被读入并成为该对象。 #&LT;在一开始使它看起来像一个评估的程序,它们是相同的。