Hatena::ブログ(Diary)

PON日記 このページをアンテナに追加 RSSフィード

2007-10-18

[] Programming Language Examples Alike Cookbook 10:45  Programming Language Examples Alike Cookbook - PON日記 を含むブックマーク  Programming Language Examples Alike Cookbook - PON日記 のブックマークコメント

PLEAC - Programming Language Examples Alike Cookbook

(http://pleac.sourceforge.net/)

Perlクックブックのお題を、Python、Ruby、Haskellと言った25個の他言語で再現しているサイト。

自分もPythonで挑戦中ですが、ここまでの再現は、うん無理。

2007-09-08

[] Haskellのお勉強 その21 02:38  Haskellのお勉強 その21 - PON日記 を含むブックマーク  Haskellのお勉強 その21 - PON日記 のブックマークコメント

読了

2007-09-05

[] Haskellのお勉強 その20 22:53  Haskellのお勉強 その20 - PON日記 を含むブックマーク  Haskellのお勉強 その20 - PON日記 のブックマークコメント

関数2

 Haskellでは、関数同士を(.)関数で連結させて、

 新しい関数を作成することができる。

 例えば、

numberOfLines cs = length $ lines cs

numberOfLines = length . lines

のように書ける。

2007-09-04

[] Haskellのお勉強 その19 01:41  Haskellのお勉強 その19 - PON日記 を含むブックマーク  Haskellのお勉強 その19 - PON日記 のブックマークコメント

関数について1

 Haskellにおける関数の定義とは、

 「〜する処理」という関数に対して、変数を束縛すると

 言う意味で、これを「関数束縛」という。

 また、関数も値として処理に使用することができる。

 関数の中には、「高階関数」と「無名関数」を言うのがあって、

 「高階関数」は、関数自体を引数にしたり、戻り値にしたりできる・

 「無名関数」は、変数束縛しない関数で、

\num -> num * num

のように書く。

2007-09-02

[] Haskellのお勉強 その18 18:41  Haskellのお勉強 その18 - PON日記 を含むブックマーク  Haskellのお勉強 その18 - PON日記 のブックマークコメント

第7章「基本的な構文」を読み終わったので、まとめ。

1.コメント

 1行コメント

main = print $ square 5

-- nの2乗
square :: Int -> Int
square num = num * num

 ブロック形式コメント

main = print $ square 5

{-
  nの2乗
-}
square :: Int -> Int
square num = num * num

 リテレイト形式

> main = print $ square 5

  nの2乗

> square :: Int -> Int
> square num = num * num

\begin{code}

main = print $ square 5

\end{code}

nの2乗

\begin{code}

square :: Int -> Int

square num = num * num

\end{code}

2.レイアウト

 do式による構文

main = do cs <- getContents
          putStr cs

do式によってまとめる方式を、

レイアウトまたはオフサイドルールという。

 ブレスによる構文

main = do { cs <- getContents ;
            putStr cs
          }

3.if式

if 条件式 then 式1 else 式2

4.パタンマッチ

 Haskellのパタンマッチは、値のパタンの照合だけでなく、

 変数への束縛も行う。

 パタンの種類

  ・変数パタン

  ・_ パタン

  ・リテラルパタン

  ・タプルパタン

  ・リストパタン

  ・データコンストラクタパタン

 1.変数パタン

>|haskell| 

square :: Int -> Int

 square n = n * n

||<

上記は、Int型の数値であれば、すべてにパタンマッチし、

変数束縛される。

すべての型に対しての場合は、

  id :: a -> a
  id a = a

a は、型変数であらゆる型にもマッチする。


 2._ パタン

_パタンは、変数パタンと同じくすべての型にマッチするが、

値の束縛は行わない。

つまり、処理には使えない。

 3.リテラルパタン

パタンとして、変数や_を用いるのではなく、

'\t'や123などのリテラルを用いる。

 4.タプルパタン

パタンをして、(Int,String)などのタプルを用いるパタン。

 5.リストパタン

パタンとして、[num1,num2]などのリストを用いるパタン。

 6.データコンストラクタパタン

[]や: などのデータコンストラクタ(9章で学ぶ)を用いてのパタン。

 7.@パタン

たとえば、

hoge str@(c:cs) = ・・・

のようなパタンがあって、"hoge"という値を関数適用した場合

"hoge"@(h:oge)

のように変数束縛される。

5.ガード

 パタンでマッチした値に対して、さらに条件分けする場合に使用される。

6.case式

 関数の定義の中でパタンマッチやガードを使用したい場合に使用される。

 こんな感じ

main = print $ mycase 1

mycase :: Int -> Int
mycase num = case num of
                      1 -> 1
                      2 -> 2
                      3 -> 3