コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

Haskellを触れる環境を作ったから電卓として利用してみた

新しい言語環境を導入するたびに電卓として利用している気がする

どうも、僕です。

まじめなプログラムを作らないで環境だけを導入する投げっぱなしプログラミング学習のコーナーです。今回は関数型言語と呼ばれるHaskellを導入して電卓として利用するということをしていきます。似たようなことを何回もやっていますが、今回導入した言語は関数型なので今まで取り扱った言語とはだいぶ異なります。どう異なるかは僕もよくわかってません。なんかすごいらしいですので、いつか使う機会がくると信じて導入だけしていこうと思います。

地震の時の備えみたいなこと言ってますけど、手を動かして覚えなきゃこんなことしても無駄なんですよね…。

準備

まずはこちらから、Haskell環境を準備します。
Download Haskell Platform

そして、動作確認をします。黒い画面でghciを入力。
f:id:andron:20170109171132p:plain
Preludeって出るとCLIでがりがりプログラムを書けるようです。

動かない場合はパスとかを確認してみるといいかもしれないです。

電卓として使ってみた

この画面で計算を入力すると電卓として利用できるそうです。
f:id:andron:20170109171425p:plain
こんな感じに*1

0で割った時の処理ができてる電卓はいい電卓。
というわけで電卓として利用できました。また僕の環境に電卓が導入されてしまいましたね。

おまけ

僕の中ではやりたいことをやりきってしまったわけだけど、電卓機能紹介は流石にやりすぎで消化不良なのでこちらの入門チュートリアルもやって終わりにしようと思います。
Haskell入門 5ステップ - HaskellWiki

あ…。目次見る限りだと、すでに似たようなことをやってしまっている気がする。
でも.hsファイルを書いてみたくなったので、同じことだけどこちらの項目をやっていこうと思います。
――と思ってはじめましたが、"初めてのHaskell並列プログラミング"、「main = do」から先の処理が何やってるかまじでわからん。



雑解読。

import Control.Parallel
 
main = a `par` b `par` c `pseq` print (a+b+c)
    -- ローカル変数、ローカル関数の定義
    where
        a = ack 3 1 -- 13
        b = fac 4   -- 24
        c = fib 5   -- 5

-- 階乗
fac 0 = 1
fac n = n * fac (n-1)

-- アッカーマン関数
ack 0 n = n+1
ack m 0 = ack (m-1) 1
ack m n = ack (m-1) (ack m (n-1))

-- フィボナッチ数
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

多分、コードを見る限りだとこういう意味なんだと思う。--コメントアウトできるそうです。
処理系がよくわかってないけど、数学処理がほぼ一行で処理できるのにはかなり凄みを感じる。すごいシンプルだよこれ。

再帰がわかったら絶対楽しくなってくるだろうな。

*1:こちらはインストール時におまけで付いてきたWinGHCiを使っています。機能的には多分同じ