トップ «前の日記(2017-07-20(Thu)) 最新 次の日記(2017-07-25(Tue))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2017-07-22(Sat) 真夏だ

Hならこう書く、はず

しつこくしつこく年齢算。
余計な一文を削除。

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や内容が変った場合はあしからず。

index.htmlは ここから。