我正在学习人工智能课程的球拍。对于第一个项目,老师给了我们一个包含合同和单元测试的文件,我们将编写使其运行所需的功能。我刚刚创建了我需要的函数的存根,并且除了一个之外还满足了所有的合同:
[start-state (and/c state? (not/c state-game-over?))]
我声明的功能目前看起来像这样:
(define (start-state)
(state '() start-tiles 0)
)
状态结构由老师给出:
(struct state (played unplayed passes) #:prefab)
合同:
[struct state ((played (listof (and/c tile? tile-at-origin?)))
(unplayed (listof (and/c tile? tile-on-board?)))
(passes pass-count?))]
崩溃时出现错误:
start-state: broke its contract
promised: (and/c state? (not/c state-game-over?))
produced: #<procedure:start-state>
which isn't: state?
in: (and/c state? (not/c state-game-over?))
contract from:
我相信我的start-state过程会创建并返回一个状态结构,但显然它会自行返回并违反合同。如何返回结构而不是程序?
答案 0 :(得分:3)
看起来start-state
不应该是一个过程,而是一个值。也就是说,你需要做
(define start-state (start ...))
而不是
(define (start-state) ...)