僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
しつこくしつこく年齢算。
余計な一文を削除。
Prelude> ages p c = [(p-c) * 2, p-c, p-c*2]
Prelude> ages 40 18 [44,22,4] Prelude> ages 90 68 [44,22,-46]
まず階乗。
fact x = if x == 1 then 1 else x * fact (x-1)
*Main> fact 5 120 *Main> fact 20 2432902008176640000
それから、1+2+...+n。
Prelude> :{ Prelude| calc n = if n == 1 Prelude| then 1 Prelude| else n + calc (n - 1) Prelude| :}
Prelude> calc 100 5050 Prelude> calc 1000 500500
Haskellのリスト確認。
ghci8.0.1の対話環境では漢字の出力はまだ対応してないかも。
"文字列"は、['文','字','型']のリストであるらしい。
Prelude> "文字型" == ['文', '字', '型'] True
文字列の連結には"++"、リストの要素へのアクセスは "!!"を使う。ゼロ番目から数える。
Prelude> "This is" ++ " a pen." "This is a pen." Prelude> "understand" !! 4 'r'
'文字型' + "文字列" の連結演算子":"がある。
ただし逆順にはできない。
Prelude> 'T' : "his" "This"
Prelude> "Thi" : 's' <interactive>:98:9: error: • Couldn't match expected type ‘[[Char]]’ with actual type ‘Char’ • In the second argument of ‘(:)’, namely ‘'s'’ In the expression: "Thi" : 's' In an equation for ‘it’: it = "Thi" : 's'
リストの比較も可能。左から一つずつ比較するらしい。
当然、数値の比較とは違う場合がある。
Prelude> "1238" > "1248" False Prelude> "128" > "8" False Prelude> "128" > "8" Prelude> 128 > 8 True
あと、リストの一部を返す関数も。
この場合、空リストを喰わせると例外が。
Prelude> head "Head" 'H' Prelude> tail "tAIL" "AIL" Prelude> init "INIt" "INI" Prelude> last "lasT" 'T' Prelude> last "" *** Exception: Prelude.last: empty list Prelude> last [[],[],[]] []
まだ続くが、これで一旦〆ておく。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。