Haskell
燃え尽きたぜ、真っ白に
経過をここに晒していくよ! ヽ(゚∀゚)ノウンコー! lexer を考える ここを参考に考えるよ! 今回作るやつは Unicode は考えない! オフサイドルールなし! 8 進数なし! 16 進数なし! 指数(0.23e10 みたいなやつ)なし! 文字列内の \ で改行を無効にするやつ…
会社に出社して、 id:nishiohirokazu と Haskell の式の評価について話した。 ぐにゃぐにゃしたものが少し形になった気がした。 あとは、パターンマッチが鬼門だ
いろいろ試行錯誤をしていて JavaScript の関数を作って呼び出すのと Haskell のそれとの決定的な違いを見つけた。 それは、たぶんものすっごい単純で当たり前なことだけど、これが分かったとたんに僕の周りのピースが一気に繋がったので、恥をしのんで書く…
Haskell のリストはシンタックスシュガーだらけ a = [] b = [1] c = [1,2] d = [1..10] e = [1..] f = [1,3..] g = [ x * x | x <- f ] 逆に分かりにくいので書き直す a = [] b = (:) 1 [] c = (:) 1 ((:) 2 []) d = ff 10 where ff 0 = [] ff i = (:) 1 (ma…
Haskell Hackathon やりたいね! - yukobaのブログ がくがくぶるぶる みんなあ、オラに勇気を分けてくれええ
注釈 まだまだ、Haskell 歴 5 日なので、多少間違っててても許してください。 do は これを main = getChar >>= (\a -> ( getChar >>= (\b -> putChar b)) >> ( putChar a)) これにしている main = do a <- getChar b <- getChar putChar b putChar a do の…
ほんのちょっとけ分かったかも 環境という引数を省略する形なのかな? 環境が変われば値も変わる。 環境という値を引数として与えているならば、毎回値が変わるのも参照透過と言い切れる。 本来はこういうもの? f :: a -> Env -> Envでも、これだと Env だ…
これがモナド main = putStrLn $ unlines $ do v1 <- [1, 2, 3] v2 <- f v1 v3 <- g v2 f v3 f :: Integer -> [String] f x = [show x, show x] g :: String -> [Integer] g x = [read x, read x] よくわからん。 なんか、もうすこしで分かりそうなんだが。…
コンパイルしようとすると以下のようなエラーが出る場合がある ghc ... <built-in>:0:1: lexical error そういうときはこうしてやればおk LANG=C ghc ...</built-in>
以下の例はダメ main = putStrLn $ unlines $ map show $ f f = g 0 f g n (x:xs) = n : g (x + 1) xs (x:xs) → ~(x:xs) なら OK main = putStrLn $ unlines $ map show $ f f = g 0 f g n ~(x:xs) = n : g (x + 1) xs その心は 一番最初に (x:xs) のパター…
再帰が難しいので練習として色んな数列を作ってみた main = do putStrLn $ j $ take 8 $ s1 0 1 putStrLn $ j $ take 8 $ s2 1 2 putStrLn $ j $ take 8 $ s3 putStrLn $ j $ take 8 $ s4 0 (+1) putStrLn $ j $ take 8 $ s4 1 (*2) putStrLn $ j $ take 8 $…
このエントリはきっと嘘だらけだと思います Haskell を使ってみて自分が感じたイメージを文章にしてみただけです。 Haskell の遅延評価について自分の脳内を整理 Haskell は変数がない。 変数っぽくみえるシンボルは全部(?)関数だ。 だから、副作用(IOとか)…
遅延評価は分かったけど 具体的に使ってみないことには「便利!!」と感動できないので。 毎日ちょっとだけ暇見つけて Haskell を勉強してみよう はじめてのプログラミング 僕は、初めてプログラムを書くとき、閏年を考慮した月の日数計算をするプログラムを…