読者です 読者をやめる 読者になる 読者になる

コンパイラかく語りき

文系新卒プログラマーのメモ

QiitaのHaskell入門を読んだ

Haskell

Haskellには以前から興味があったのですが、ついに入門しました。

以下の記事を読みました。

 

qiita.com

 

以下、メモ。

読みながら感じたこと、学んだこと、補完するべきことを書きます。

 

実行方法

runghcというコマンドを使うようです。

ghc = glasgow haskell compiler

 

公式サイトから、スターターパッケージ的なものをインストールしました。

MacOS用)

www.haskell.org

 

f:id:chuck0523:20151123203107p:plain

 

何はともあれハローワールド

新しい言語を始めて、まずやること。Hello worldですね。

Qiitaより写経しました。

gistb0d2689b74d9ddb13d3f

 

実行結果がこちら。

f:id:chuck0523:20151123203246p:plain

 

これでHaskellプログラマーの仲間入りですね!

 

インデント命

Haskellには関数を包む{}がありません。

インデントが大切のようです。ruby系の言語と一緒ですね。

 

標準入出力

putStrLn :標準出力

getLine:標準入力(1行)

getContents:標準入力(複数行)

 

ファイル読み書き

readFile:ファイル読み取り

writeFile:ファイル書き込み。引数はファイル名+書き込み内容

 

論理値

true, false ではなく、True, Falseらしい。

 

変数 

変数の扱いちょっとめんどくさい…。でも、高階関数、カリー化、ラムダ式を学べば、便利な関数を手に入れることができるらしい。ふむ。

gist713227dd374e1cd633d8

 

関数

2種類あるらいい。

入出力を扱う関数と、そうでない関数。前者は入力の値によって結果が変わってしまう。

なので、前者を純粋でない関数。後者を純粋でない関数、というらしい。

 

引数とreturnを使った例がこちら。

gist3e2b9e4c3b75bb2f970d

 

配列?

あまり配列を使わないらしい。単方向リストというものを使うらしい。

 

gist584f7ba60f87a9fdc56d

 

for文むずかしい

シンタックスが難しい。

gist84a65d627a36b00578e8

 

ただし、このfor文は純粋ではない関数の中でしか使えず、しかもバグの原因になるからあまり使わない方がいいらしい。

 

if文には2種類ある

純粋関数とそうでない関数では、if文のシンタックスが微妙に異なる。

gist47832dfabc9925d5564e

 

FizzBuzz

FizzBuzzなるものがあるんですね。

Fizz Buzz - Wikipedia

 

gistdbfa4ab55811e82eaaf0

 

 

まとめ

というわけで、入門しちゃいました。Haskell

とはいえ、カンタンなシンタックスを学んだだけですが。

Qiitaの記事につづきがあったので、次回はそれを消化したいと思います。

 

※この記事内のコードはすべて、Qiitaを参考にして書かれたものです。