関数型言語は理解できたが何故Haskellがあれ程信仰されているのか分からない
具体的にどこが凄いのか教えて
関数型言語は理解できたが何故Haskellがあれ程信仰されているのか分からない
具体的にどこが凄いのか教えて
やっと意味が分かるようになったわ
よくこんな面倒なの扱えんな
最近はじめた
練習でエイトクイーン書いたのでだれかコードレビューしてくれよん
MaybeからListに変換するあたりがどうすんのかよくわかってない
import System.IO
import Control.Applicative
main = do
let e = [[]] >>=putOne >>= putOne >>= putOne >>= putOne >>= putOne >>= putOne >>= putOne >>= putOne
print $ e !! 0
print $ e !! 1
print $ e !! 2
print $ e !! 3
print $ e !! 4
print $ length e
type Positions = [(Int, Int)]
-- put one queen on (x,y)
put :: Positions->Int->Int->Maybe Positions
put poss x y
| canPut poss x y = Just $ (x,y):poss
| otherwise = Nothing
where
canPut poss x y = (inBoard x y) && not (crossAny poss x y)
inBoard x y = all (\x->x `elem` [1..8]) [x,y]
cross pos x y = fst pos == x || snd pos == y || abs (fst pos - x) == abs (snd pos - y)
crossAny poss x y = any (\pos->cross pos x y) poss
-- put one queen on puttable place
putOne :: Positions -> [Positions]
putOne [] = map (:[]) $ (,) <$> [1..8] <*> [1..8]
putOne poss@(pos:_) = let xys = [(x,y) | x<-[1..8], y<-[1..8], x>fst pos || (x == fst pos && y>snd pos)] in
xys >>= (\(x,y)->maybeToList $ put poss x y)
where
maybeToList maybe = case maybe of
Nothing -> []
Just(a) -> [a]
人口少ない割に知名度あるから使えると尊敬される
なんとなくだけどモナドって検査例外と似てる
haskellerが気持ち悪い理由はワンライナーだから 以上
理解は進んだがこれで実用的なプログラムを書けるようになるまでかなり掛かりそうだ
可読性のいいhaskellってどう書くんだろう
それとioモナドはオブジェクト志向と組み合わせると良くなりそうだなと感じた
Applicative使いこなしたい