0

我必须制作一个将 House 转换为 NHouse 的功能。

data House = House { hworking :: Working, hfinished :: Finished}

type Working = [Roof] , type Finished = [Roof]

data NHouse = NHouse {rot :: [NRoof]} 

data NRoof = NRoof {h :: Roof, st :: Status }

data Status = Working | Finished

我想过做一个辅助功能,将 NRoof 中的每个屋顶转换,然后将其应用于房屋中的每个屋顶。

但我就是想不通。我正在做这样的事情:

nWorking :: Roof -> NRoof
nWorking x = NRoof {x, Working }
4

1 回答 1

1

是的,你正朝着正确的方向前进。您可以创建一个函数来转换RoofNRoof给定的状态。

transform :: Status -> Roof -> NRoof
transform s r = NRoof r s

然后你可以把这个函数映射到你房子里的屋顶列表上。

h2n :: House -> NHouse
h2n (House w f) = NHouse $
                map (transform Working) w ++
                map (transform Finished) f

在一行中,这可以写成

h2n (House w f) = NHouse $ map (flip NRoof Working) w ++ map (flip NRoof Finished) f
于 2012-12-27T16:31:27.533 回答