2006-04-01から1ヶ月間の記事一覧

ファイルを読み込む

少し御無沙汰でした。今回はファイルを呼んで表示してみようと思います。他の言語では、基本的な機能で簡単に実現できますが、Haskellではこのような入出力などは、副作用のあつかいとなりちょっと面倒です。入出力など順序が重要になるような処理では、モナ…

今日も問題を

今日も問題をといてみます。 今日の問題はこちらちょっと考えすぎて時間がなくなってしまったので、課題1、2それぞれ片方のみやってみます。もう一方のやりかたは別の日にでも。 ソースはこちら。 hasko$ cat kougaku2.hs maxOccursList l = ( maxis l , how…

遅延評価

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をやっていこうと思います。