【问题标题】:Scheme game board cat计划游戏板猫
【发布时间】:2014-12-01 07:27:14
【问题描述】:
我正在尝试做猫套装,但我还是 Scheme 的新手。
实现递归谓词获胜者?接收符号数组
表示游戏板猫(按行排序)和标记
玩家,并确定玩家是否赢得了比赛。记住胜利是
必须是 3 个在线品牌,水平、垂直或对角线。
(winner? ‘((X X v)(v O O)(X v O)) ‘O) => #f
(winner? ‘((X v X)(O O O)(X v O)) ‘O) => #t
(winner? ‘((X X O)(v O O)(X v O)) ‘O) => #t
(winner? ‘((X X O)(v O O)(O v X)) ‘O) => #t
【问题讨论】:
标签:
list
matrix
scheme
cat
【解决方案1】:
在您的代码中,您没有使用引号字符',而是使用智能引号之一。它不起作用,因此您应该将其更改为'。
所以你解释一下,你可以通过 3 种方式获胜:
(define (winner? board sym)
(or (winner-horizontal? board sym)
(winner-vertical? board sym)
(winner-diagonal? board sym)))
如果使用unzip,定义如下:
(define (unzip lst)
(apply map list lst))
你可以翻板:
(unzip ‘((X X O)(v O O)(X v O))) ; ==> ((X v X) (X O v) (O O O))
这使得winner-vertical 变得多余,因为您可以在unzipped 板上使用winner-horizontal:
(define (winner? board sym)
(or (winner-horizontal? board sym)
(winner-horizontal? (unzip board) sym)
(winner-diagonal? board sym)))
给你。你现在有两个小问题要解决。希望它对您有所帮助。要获得更具体的帮助,您需要自己发布一些代码(展示努力)。