haskell

haskell.vim

おひさしぶりです。最近忙しくてHaskellを書けていないんですが、こんなものをみつけました。haskell.vimemacsにあるhaskell-modeみたいに、vimで書いていたプログラムをrunghcをつかって実行できます。

使える文字

前回、関数の名前で定義できない文字を使いエラーを出していたので、名前に使える文字をまとめてみます。まず、関数名。 1文字目は、アルファベットの小文字か、アンダースコア。 それ以降は、アルファベットの大文字、小文字。数字。アンダースコア。シング…

有理数の計算

前回の記事へ、id:nobusunさんからツッコミをいただいて、原因判明。Haskellの変数名は、小文字英数から始めないといけなかったんですね。で、id:nobusunさんが示していただいた、ソースに変更。 $ cat yuuri.hs data Yuuri = Yu Integer Integer yAdd::Yuur…

演算子=関数?

のびのびなHaskell日記さんのところのid:muscovyduckさんのコメントより カッコを外すと問題が生じるのは、'-'(マイナス)も実は関数(二項演算子)だからです 二項演算子は関数では無く、()で囲んだときに関数になると思っていたのですが、ほんとのところ…

関数と演算子の関係

haskellでは、演算子よりも関数の方が結合が強いみたいです。 例えば、1 + 2 * 3の計算をしようとして、 (+) 1 2*3とかくと9になってしまいます。 Prelude> (+) 1 2*3 9期待した動作にしたいのなら Prelude> (+)1 $ 2 * 3 7と、書くと大丈夫みたいです

$

最近は、いそがしくてSICPの問題が解けていないんですが、ふつうのHaskellプログラミングを読んでいます。ふつけるを読んでいて、入門Haskellにもでてきていたのですが、$というものの便利さに気づきました。 入門Haskellでは、$は何もしない関数として紹介…

href

もう知られているかたも多いと思いますが、hrefの御紹介。 href hrefとは、コマンドラインからHaskellの関数を検索するプログラムです。作者は、来月頭、ふつけるをお出しになる青木さんです。

ふつうのHaskellプログラミング

id:sshiさんのところで発見。日本語のHaskellの本。ふつうのHaskellプログラミングがAmazonに登録されたようです。わたしも早速注文しました。ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門作者: 青木峰郎,山下伸夫出版社/メーカ…

HaskellのAPI検索

またまた相当おひさしぶりです。haskoです。今日は、HaskellのAPI検索を御紹介。Hoogleここでは、Haskellの関数などを調べることができます。 ただ、それだけではhugsなどで、:tを使い調べるのと同じですよね。ちょっと違うのは、まず関数名の一部でも検索す…

遅延評価

Haskellでは、必要なときに、必要なだけし評価しないという、なまけもの遅延評価があります。きのうn9dさんがコメントしてくださったように、遅延評価のおかげで、無限リストも作れちゃいます [1..] Prelude> take 5 [1..] [1,2,3,4,5] takeは、ひとつめの引…

演習問題をとく

Haskellの簡単な解説ばかりではあれなので、ちょっと演習問題をといてみることにします。課題は、ここの最後のほうに書かれている演習問題以下自分の実装 hasko$ cat kougaku1.hs mul m n |n == 0 = 0 |otherwise = m + mul m (n-1) maxOccurs::Int -> Int -…

カリー化

関数(+)というのは、引数ふたつをとり、引数を足したものを返す関数です。 Prelude> (+) 1 3 4 これは、「引数をひとつをもらい、もう一つの引数に、足したものを返す」関数といえます。もし、この関数が引数を一つもっている状態だったら、どのようにいえる…

高階関数

高階関数は、引数や返り値に関数がつかわれる関数です。代表は、やっぱりmapでしょう。mapは、引数に関数とリストをとります。 そして、リストの各要素にたいして、関数を適用したリストをかえします。 Prelude> map (1+) [1,2,3] [2,3,4] 追記: id:n9dさん…

where

where節を使って、局所的な定義、つまり適用範囲を限定した定義ができます。 twicesquare x y = mysequare x + mytwice y where twice m = m * 2 mysequare n = n * n このように、whereを使うことにより、関数の中で関数を定義するような形がとれます。また…

ガードで条件

ifで条件判断ができますが、もっと簡単条件判断ができます。 それが、ガード節です。 bigbig x | x インデントをして書かれている「|」のあとに、条件式をかき、そして、そのとき適用する関数を定義してあげます。このとき、条件式のインデントはそろえる必…

ifもしも

今日は、if文をやってみます。Haskellでもif文があります。書式は、こう。 if 条件式 then 真の処理 else 偽の処理 PerlやRubyなどに近いですね。ただ、大きな違いは、Haskellでは、else節を省略できません。何故なら、if文を使用する際、関数全体に適用する…

再帰しますよ

Haskellには、繰り返しの構文がないので、再帰で繰り返します。 再帰とは、自分で自分を呼んじゃいます。 ここでは、リストを反転させるreverse関数を作ってみましょう。ただ、reverse関数は、定義されているのでmyreverseになりますが。 myreverse [ ] = [ …

リスト入門

Lisp然り、Haskellでもリストが重要です。リストとは、複数の要素が並んでいるという点では、Cなどの配列に似ていますが、ランダムアクセス(添字で要素にアクセス)ができない、要素数が動的(決まっていない)など、違う点もあります。配列というよりは、…

関数を定義する

Haskellは、関数を定義していくことでプログラムができあがります。 hoge = 1 一見、変数hogeに1を代入しているように見えますが、違います。これは、「hogeという関数を、1を返すと定義する」と考えます。「=」で関数を定義します。引数をとる関数の場合は…

開発環境とか

昨日、いきなりghcとか使っていましたが、ちょっと説明。Haskellには、コンパイラとしてghcや、インタプリンタとしてhugsなどが用意されています。実行形式のプログラムを作りたい場合は、コンパイラでコンパイルしてあげます。このとき、main関数を作ってい…

世界にこんにちは

言葉を知ったら、まずはこんにちは。これ、しきたり。 main = putStr "Hello !! Hello !!\n" これ、main関数を定義してるか、ファイルに書いて保存。 では、発話。そのまえに準備。 hasko$ ghc hello.hs -o hello 今度こそ発話 hasko$ ./hello Hello !! Hell…

現在の参考書

今なら当然、これ。入門Haskell―はじめて学ぶ関数型言語作者: 向井淳出版社/メーカー: 毎日コミュニケーションズ発売日: 2006/03メディア: 単行本購入: 3人 クリック: 94回この商品を含むブログ (138件) を見る

遅れつつHaskell

はじめまして。どこかで見た形式かもしれませんが、気にしない。 これから、マイペースにHaskellをやっていこうと思います。