Haskell趣学ガイドライン入門ノート(二)
6396 ワード
型宣言を表示します.Haskellは型を定義しない理由で、pythonに似ています.
式のタイプを特定するには
したがって、関数を定義するときに、タイプ宣言を付けることができます.
body.hs関数
Integerは高精度で、メモリが多く、どれだけの数を表すことができます.
タイプクラス
Eqクラス
Ordクラス比較サイズクラス.他にもいくつかのクラスがあります
関数構文---パターンマッチング
c++Switch caseのように
自分でhead関数を書く
let文:バインド文は前、後に式
なんとCase表現もありました.
面白い再帰ですね.
もとはここの急速な順序付けはこのように書くことができて、とても簡潔です
このブログは主に自分がHaskellに入門した点滴を計上している.
うまく書けないので,どうかお許しください.
式のタイプを特定するには
1 *Main> :t 'a'
2 'a' :: Char
3 *Main> :t True
4 True :: Bool
5 *Main> :t "HELLo"
6 "HELLo" :: [Char]
使用可能:t表示したがって、関数を定義するときに、タイプ宣言を付けることができます.
body.hs関数
addthree::Int -> Int ->Int -> Int
addthree x y z =x+y+z
fac::Integer -> Integer
fac n= product [1..n]
*Main> fac 100
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Integerは高精度で、メモリが多く、どれだけの数を表すことができます.
タイプクラス
Eqクラス
*Main> 'a'=='a'
True
*Main> 5/=6
True
*Main>
Ordクラス比較サイズクラス.他にもいくつかのクラスがあります
関数構文---パターンマッチング
c++Switch caseのように
sayMe::Int-> String
sayMe 1="One!"
sayMe 2="Two!"
sayMe 3="Three!"
sayMe 4="Four!"
sayMe 5="Five!"
sayMe x="Not between 1 and 5!"
よびだし*Main> :l body
[1 of 1] Compiling Main ( body.hs, interpreted )
Ok, modules loaded: Main.
*Main> sayMe 5
"Five!"
自分でhead関数を書く
1 head' :: [a]->a
2 head' []=error "Can call head on an empty list,dummy!"
3 head' (x:_)=x
Asモードで何が起こっているのか分からず、多分自分で自分を呼び出したのか???1 firstletter :: String->String
2 firstletter ""="Empty string,whoops!"
3 firstletter all@(x:xs)="The first letter of" ++ all ++ " is " ++[x]
4
5
6 *Main> firstletter "Dracula"
7 "The first letter ofDracula is D"
8 *Main>
警備員、またcase文のようです 1 bkm:: Double->String
2 bkm bmi
3 | bmi<=18.5="1!"
4 | bmi<=25.0="2!"
5 | bmi<=30.0="3!"
6 | otherwise=">3"
7
8
9 *Main> bkm 19.9
10 "2!"
whereキーワードは1つの値を繰り返し計算しないでください 1 bkm:: Double->Double->String
2 bkm weight height
3 | bmi<=skinny="1!"
4 | bmi<=normal="2!"
5 | bmi<=fat="3!"
6 | otherwise=">3!"
7 where bmi=weight/height^2
8 skinny=18.5
9 normal=25.0
10 fat=30.0
モジュール内のコード注意pythonに似ていますlet文:バインド文は前、後に式
1 *Main> (let a=100;b=200;c=300 in a*b*c,let foo="Hey";bar="there!" in foo++bar)
2 (6000000,"Heythere!")
なんとCase表現もありました.
面白い再帰ですね.
もとはここの急速な順序付けはこのように書くことができて、とても簡潔です
1 quicksort [] =[]
2 quicksort (x:xs)=
3 let small=[a|a<-xs,a<=x]
4 lager=[a|a<-xs,a>x]
5 in quicksort small++ [x]
6
7 Prelude> :l body
8 [1 of 1] Compiling Main ( body.hs, interpreted )
9 Ok, modules loaded: Main.
10 *Main> quicksort [1,2,3,4,5,6,9,7,8]
11 [1,2,3,4,5,6,7,8,9]
この早列はこの原始的なものでしょうが、それ自体は少し問題があるかもしれません.毎回リストの最初の要素を選んでいますが、確かに簡潔ですね.このブログは主に自分がHaskellに入門した点滴を計上している.
うまく書けないので,どうかお許しください.