0

家を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

はい、あなたは正しい方向に進んでいます。与えられたステータスに変換する関数を作成できRoofます。NRoof

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 に答える