haskellで何か書いてみる練習。
iPhoneの画素情報の構造体のリストを計算してみる。
正しい記述なのかは不明。データ型の使い方を覚えた。
pixel.hs
{-
画素計算します。
多くのコードは以下を参照しています。
http://walk.wgag.net/haskell/higherorder.html
-}
-- module PixelModule where
main = do {
print (map (name) (qsort iphones ++ ipads));
}
type PixelSize = (Integer, Integer)
production :: PixelSize -> Integer
production (x, y) = x * y
svga :: PixelSize
svga = (800,600)
fullHD = (1920,1080)
data DeviceInfo = DeviceInfo { name :: String, pixelSize :: PixelSize, retina :: Integer } deriving Show
iphone3 = DeviceInfo { name = "iphone3", pixelSize = (320, 480) , retina = 1 }
iphone4 = DeviceInfo { name = "iphone4", pixelSize = (640, 960) , retina = 2 }
iphone5 = DeviceInfo { name = "iphone5", pixelSize = (640, 1136) , retina = 2 }
iphone6 = DeviceInfo { name = "iphone6", pixelSize = (750, 1334) , retina = 2 }
iphone6p = DeviceInfo { name = "iphone6p", pixelSize = (1242, 2208) , retina = 3 }
ipad = DeviceInfo { name = "ipad", pixelSize = (768, 1024) , retina = 1 }
ipadair = DeviceInfo { name = "ipadair", pixelSize = (1536, 2048) , retina = 2 }
ipadpro = DeviceInfo { name = "ipadpro", pixelSize = (2048, 2732) , retina = 2 }
iphones = [iphone4, iphone5, iphone6, iphone6p, iphone3]
ipads = [ipad, ipadair, ipadpro]
size :: DeviceInfo -> Integer
size = production.pixelSize
qsort :: [DeviceInfo] -> [DeviceInfo]
qsort [] = []
qsort (p:xs) = qsort lt ++ [p] ++ qsort gteq
where
lt = [x | x <- xs, size x < size p]
gteq = [x | x <- xs, size x >= size p]