タグ

ブックマーク / qiita.com/pxfnc (2)

  • Strict拡張でハマったお話 - Qiita

    main = do n <- readLn print $ div10 n div10 :: Int -> Int div10 n | n == 0 = 0 | otherwise = result where result = 10 `div` n div10は10を引数の数字で割るような実装となっており、0で割られる時に0を返す実装になってます。 そして今回の問題なのですが、div10関数に0が渡った時に、Strict拡張なしでは0を返すのに対し、Strict拡張をつけてコンパイルしていた場合はdivide by zeroの例外が発生します(は?)。 Core言語でダンプして中身を読んでみた ソース上では何も変化がないので、仕方なくCore言語のソースを比較することにしました。とりあえず通常のStrict言語拡張なしのソースをダンプしてみます。 33 main :: IO () 34

    Strict拡張でハマったお話 - Qiita
    igrep
    igrep 2019/03/25
    条件によって評価されたりされなかったりする変数をifとかの外に置いても気にしなくていいのは遅延評価の典型的なメリットですよな。ガードについたwhereは確かに意識から漏れそう。
  • Elmで体験する関数型言語の面白さ - Qiita

    ElmフロントエンドのWebApplicationのフレームワークを内蔵したDSL言語です。シンプルながら高機能なElm言語は言語の分類として純粋関数型言語という枠組みに含まれます。そのシンプル故に快適というElmでの開発の特徴は純粋関数型言語の特性でもあるように思います。なので、他の言語をやっている人に純粋関数型言語の魅力を伝えるべくこの記事を書きました。では早速Elmの世界をのぞいてみましょう。 定義と型と値と関数 Elmでは、以下のようにして関数や値の定義をします。 -- valを123として定義 val = 123 -- strをString型の"hoge"という文字列として定義 str : String str = "hoge" -- numberを引数にとってnumberにする関数の定義 twice : number -> number twice n = n * 2 --

    Elmで体験する関数型言語の面白さ - Qiita
    igrep
    igrep 2018/12/11
  • 1