【发布时间】:2013-05-04 05:53:56
【问题描述】:
这是一项家庭作业,最后一点我真的很挣扎。我们正在用 Haskell 编写“Battleship”,除了一些关于函数式语言的一般性讲座之外,我们没有太多要讲的了。没有教科书等。我曾多次提到 LYAH,那里有好东西,但似乎没有针对这个特定问题的建议。
为了上下文,我将把我的整个战舰代码放在上面,这样你就可以看到我稍后引用的定义。
--A
data Row = A | B | C | D | E | F | G | H | I | J deriving (Enum, Ord, Show, Bounded, Eq, Read)
data Column = One | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten deriving (Enum, Ord, Show, Bounded, Eq, Read)
--B
data Address = Address Row Column deriving (Show, Read, Eq)
--C
data Cell = Cell Address Bool deriving (Show, Read, Eq)
--D
data Ship = Ship [Cell] deriving (Show, Eq)
--E
data Ships = Ships [Ship] deriving (Show, Eq)
--F
toAddress r c = Address (toEnum r) (toEnum c)
--G
toRowColumn (Address aRow aColumn) = (fromEnum aRow, fromEnum aColumn)
--H
allAddressesA = [ Address row column | row <- [A .. J], column <- [One .. Ten]]
--I
allAddressesB = [toAddress row column | row <- [0 .. 9], column <- [0 .. 9]]
--J
targetShip (Ship ship) (Address row column)
| Address == map (\list -> (head Address Bool)) s
--K
targetShips [(Ships)] toAddress //TODO
--L
isSunk Ship ship
|ship [] = true
|otherwise foldl
--M
areSunk [(Ships)] //TODO
现在我还将发布具体的作业描述,这样我需要帮助的内容就不会出现任何沟通错误:
(j) 编写一个函数 targetShip,它接受一个 Ship 和一个目标 地址作为它的两个参数。如果船有一个带有目标的单元格 地址,该单元格被标记为沉没。该船的更新版本是 回来。如果船是空的,则返回空船。 (1张地图, 116 个字符)
(k) 编写一个接受列表的函数 targetShips Ships 和目标地址作为其两个参数。它试图 击沉船列表中的每艘船。它返回更新船舶的列表。 如果没有船只,则返回空列表。 (1 地图,86 字符)
(l) 编写一个函数 isSunk 接受一个 Ship 作为它的 范围。如果船是空船,则返回真。否则, 如果所有单元格都标记为沉没,则返回 true。 (1折,78个字符)
(m) 编写一个函数 areSunk,它接受一个 Ships 列表作为它的 范围。如果没有船只,则返回 true。否则,返回 如果所有船只都被标记为沉没,则为真。 (1折,78个字符)
所以我在这里特别挣扎的是最后 4 个。我已经测试过的解决方案 (A - I),它们工作得很好。
首先,我们需要知道如何引用单元格值...地址和布尔值。
我们不能写更多的函数。
我假设您会想要对特定问题进行更多解释,因此我会密切关注。任何关于从哪里开始解决最后四个问题的提示将不胜感激。提前谢谢你...我现在会回到我的文本编辑器并尝试解决这个问题。
【问题讨论】:
-
我猜点赞的同学也想知道这个问题的答案;)