どうも。2回目の記事でございます。
今回はHaskellの基本構文を勉強していこうと思います。
1:出力について(IOモナドじゃないよ。ただのPuts的な奴)
やはり入門といえば。。。!
基本のHelloWorldからですよね!でも仕事で使ってみたいから気持ちを込めてHelloWork!にします。
>main = putStrLn "HelloWork" |
これ一行で完成です。
これを*.hsで保存してGHCあたりでコンパイルかけて実行しましょう。
どうでしょう?できました??
さてここから留意すべきこととして
・大文字と小文字は区別される。
・文字列は"" で囲んでリテラルにします。
・mainは他のプログラミング言語のmainと同じ。
関数 putStrLn は,文字列&改行で出力する関数です。
改行が不要であれば putStr 関数を使用します。
なお文字列以外を扱う場合はprint 関数を扱います。
main = print |
さてしかしここで分けて書く
main = putStrLn "Hello";putStrLn "Work" |
というのはできないのです。なので
main = do putStrLn "Hello";putStrLn "Work" |
doをつけてあげます。
見づらいのでインデントをつけましょう!
ここでも2つ選択肢があります。
1
main = do {putStrLn "Hello";putStrLn "Work"} |
2
main = do putStrLn "Hello" | |
putStrLn "Work" |
と言った感じのCのように扱えるスコープのカッコ{}とセミコロン;を用いる方法と改行を揃えて記述できます。
この時のルールとして、
1の方はキーワード where, let, of のあとに{}を置きます。
2の方はdo, where, let, of の後に現れる最初の式が揃える頭になります。ですので今回はputStrLnでそろえています。
2.変数/値
変数名 = 定義
で行います。
n = 10 | |
main = print n |
なお変数は束縛され、常に定数です。Haskellの参照透過性のために再代入はできません(破壊的代入ぼそぼそ)
そして型推論で型名定義がいらないのが嬉しい。
値の表現をリテラルと言います。よく聞くのは文字、文字列リテラルだと思います。表現方法なのでどの言語も例外なくあるはずです。
ある程度のものを挙げますので触ってみましょう
やり方
Prelude>(ここに打つ) |
・数値リテラル:そのまま数字打つだけ。ex.0,50
・文字リテラル:文字を ’(ここに文字を入れる)’(シングルクオート・引用符)で囲んでつかう。ex.'A','i'
・文字列リテラル:"(ここに文字を入れる)"(ダブルクオート・二重引用符)で囲むだけ。ex."taketaroλ"
さてつぎは扱える型を見てみましょう。
なお真偽値リテラルは存在しなく、True/Falseは値コンストラクタというものになっています。
3.型(前編)
すべての基本。型です。型を知れば値を制せれます。
Haskellぽい堅苦しく(?)型付けな言い方をすればデータがどこの集合に属するかというものです。
なおHaskellの型名は基本初め大文字です。ex.Int,Double....
関数や変数に型を明示的に指定するときは::(コロン2つ)で指定します。
GHCiでは:t(コロンt)で型を確認できます。
やり方
Prelude>:t(ここに打つ) |
これは関数にも演算子にも言えることで&&(論理積)やnot(関数)でも試してみましょう。
おや。。。?数字や文字で(明示的以外に)やったら型以外も出てくるって?そうです、気が付きましたか。。。
IFやったことがないのならば、0や”Hello”でもいいのでやりましょう。
そうすると
"Hello"::[Char] | |
0::Num a=>a |
とか出ると思います。
さて。
[ ] | |
=> |
という不思議なものが出てきました。
まずひとつ目はリスト型で多相型といいます。
仲間としては、タプルやEitherなど。
具体的に言うとC++のテンプレートのようないわゆる型ジェネリックと言われているもののように柔軟に扱えれるタイプのことです。
=>は型クラスに使われるものです。(型クラス:ある型がなんかの性質を持つインターフェース。インスタンス型てきな)
=>コイツ自体は型クラス間制約といいます。これはこの型クラスでのインスタンスを作ってそれを例えば”takeはNumのインスタンスである”と言い切るために使います。
逆に言えばこれがなくてはインスタンスが作れない大切なやつです。
次は2回目中編です(まさかの後編じゃない)。最後にやった、
多相型(リストなどを)キーワードに説明していこうと思います。
Ps:テストで更新遅れました><💦