这是一个家庭作业,我真的在最后一点挣扎。我们正在用 Haskell 编写“Battleship”,除了一些关于函数式语言的一般性讲座之外,我们没有太多要讲的了。没有教科书等。我曾多次提到 LYAH,那里有好东西,但似乎没有针对这个特定问题的建议。
作为上下文,我将把我的整个 Battleship 代码放在上面,这样你就可以看到我稍后引用的定义。
--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) 编写一个接受 Ships 列表作为参数的函数 areSunk。如果没有船只,则返回 true。否则,如果所有船只都被标记为沉没,则返回 true。(1折,78个字符)
所以我在这里特别挣扎的是最后4个。我已经测试过的解决方案(A-I),它们工作得很好。
我们需要知道如何引用单元格值……地址和布尔值,对于初学者。
我们不能写更多的函数。
我会假设你会想要更多关于特定问题的解释,所以我会密切关注。任何关于从哪里开始解决最后四个问题的提示将不胜感激。提前谢谢你......我现在将回到我的文本编辑器并尝试解决这个问题。