我有一个表示移动的结构
(struct move (tile x y rotations) #:prefab)
也允许通过,所以我有一个bool来测试一个动作:
(define (action? v)
(if (or (pass? v)
(move? v))
#t
;; else
#f
)
)
我可以宣布像
这样的举动(define test (move (tile 'blue (list (posn 0 0 ) (posn 1 0) (posn 2 0) (posn 3 0) (posn 3 1))) 2 4 0))
当我测试行动时?它通过了:
(行动?测试) #T
但是,当我在另一个模块上使用此文件时,移动结构不被视为有效移动:
州 - 过渡:合同违规 预期:(和/ c动作????) 给定:'#s(移动#s(瓦片蓝色(#s(posn 0 0)#s(posn 1 0)#s(posn 2 0)#s(posn 3 0)#s(posn 3 1))) 2 4 0) 这不是:???
以下是教师提供的州过渡合同:
[state-transition (->i ([s state?]
[a (s) (and/c action?
(cut state-action-legal? <> s))])
[result state?])]
所以我在两个地方基本上有相同的对象。在其中一个中它通过了测试,在另一个中它失败并且合同被破坏了。为什么会这样?
修改
以下是state-action-legal的定义?
(define (state-action-legal? state action)
(not (state-action-violation state action))
)
状态操作违规会返回表示操作不合法的字符串,如果操作合法则返回#F。我知道他们都正常工作,因为我们手动测试它们,老师提供单元测试以确保正确实施,这些功能通过所有这些。
结束修改
感谢您的帮助。