Haskell

コメントの書き方。

--コメント {- コメント -} --は行末まで。 {--}は囲まれている範囲。

concatMap関数。

concat関数とmap関数を一つにまとめた関数。 main = print $ concatMap concatMapTest [1, 2, 3] concatMapTest :: Int -> [Int] concatMapTest n = [n * n] 結果。 [1,4,9]concat関数とmap関数をまとめているということは、 main = print $ concat $ map co…

replicate関数。

第2引数の値を第1引数で指定された数分だけ含むリストを返す。 main = do putStrLn $ replicate 5 'a' print $ replicate 5 1 print $ replicate 0 'a' print $ replicate (-1) 'a' 結果。 aaaaa [1,1,1,1,1] "" ""

concat関数。

リストの要素を連結しリストを返す。 concat ["a", "b", "c"] concat [[1,2], [3], [4,5,6]] concat [[[1,2,3]], [[4]]] それぞれの結果。 "abc" [1,2,3,4,5,6] [[1,2,3],[4]] リストは1つしか減らない点に注意。 一重のリストに対して適用すると concat [1,…

パターンマッチ。

main = putStrLn $ patternTest 2 patternTest :: Int -> String patternTest 1 = "one" patternTest n = "other" 結果。 other 値のパターンによって実行される関数が変化する。 patternTest :: Int -> String patternTest n = "other" patternTest 1 = "on…

高階関数。

高階関数、英語だとhigher order fuction。またよくわからない用語が出てきた。 本にあるサンプルを書いて実行してみる。 main = print $ map square [2, 3, 4] square :: Int -> Int square n = n * n 結果。 [4, 9, 16] map関数の定義は、 map :: (a -> b)…

if文。

標準入力にタブが含まれていたら@に書き換えて出力。本にあるサンプル。 main = do cs <- getContents putStr $ expand cs expand :: String -> String expand cs = map translate cs translate :: Char -> Char translate c = if c == '\t' then '@' else c…

型を宣言する。

Haskellは関数の引数、戻り値の型を明示的にしなくても、型推論という機能のため動作するけど、明示的にすることもできる。 lastNList :: Int -> String -> String lastNList n cs = unlines $ takeList n $ lines cs 書き方は、 関数名 :: 第1引数の型 第2…

標準入力の最初の10行を出力する。

main = do cs <- getContents putStr $ firstNLines 10 cs firstNLines n cs = unlines $ take n $ lines cs 始めての関数定義。firstNLines。 自分で関数を定義するには、 関数名 引数1 引数2… = 実際の処理 とする。 ここでは標準入力から得た文字列csをリ…

標準入力の終わりから10行を出力する。

main = do cs <- getContents putStr $ lastNLines 10 cs lastNLines n cs = unlines $ takeNList n $ lines cs takeNList n ss = reverse $ take n $ reverse ss reverse関数はリストの要素を逆順にする。とりあえずの関数いろいろメモ。 関数名 機能 lines…

WindowsにHaskellの処理系をインストール。

ここからインストーラをダウンロードして実行、環境変数PATHにコンパイラなどがインストールされたディレクトリを追加(現バージョンはC:\ghc\ghc-6.6\bin) 使い方はid:t-imaizumi:20060927:1159361266と同じ。

標準入力の行数を数える。

Haskellの勉強を再開。以前、勉強していたところをまったく覚えていない。ここに記録しておいてよかった。 main = do cs <- getContents print $ length $ lines cs lines関数が文字列を行単位でリストに分割し、length関数はリストの要素数を返す。 $は式を…

リスト事始め。

Haskellにとってリストは超重要らしい。 何せ文字列もリストらしい。 リストは他の言語に多くあるように [1, 2, 3]と書く。 リストの末尾には空リスト(くうりすと)というからの要素があるとのこと。何のために使っているのか? また、リストの中身は全て同じ…

Carbon EmacsでHaskellを書く。

会社の健康診断に行ってきた。 毎年、同じ病院なのだがココの看護婦さんのレベルが高くて血圧が上がりそうなのが困る。正常範囲だったけど。歳をとったということだろうか。 ガリガリとプログラムを書く上で道具の整備は超重要ということで、CarbonEmacsでHa…

catコマンドだニャー。

とある焼き肉屋で1皿100円のカルビを食べた。いろんな意味で100円だった。 本に従ってcatコマンドをHaskellで作る。 至って簡単。こんな感じ。 main = do cs <- getContents putStr csこれで標準入力で受け取った値を標準出力に出力することが出来る。 getCo…

Hello! Worldを復習。

久しぶりにエントリ。 金曜の夜から日曜の夜まで、訳あってMacBookの前に座ることが出来なかった。 LivedoorReaderの未読件数がえらいことに、そしてHaskellの本を何処まで読んだか忘れてしまった。しかし、大して読み進めていなかったので、最初から読み始…

何はともあれHello,World!

お疲れ気味の頭に初体験の関数型言語は辛いっす。 そんなことを言ってもやらないと先に進まないので、何はともあれこんにちは世界。 エディタで main = putStrLn "Hello, World!"と記述し、hello.hsとして保存。 でもって、コンパイル。 ghc hello.hs -o hel…

Haskellの処理系をインストール。

何はともあれ、処理系がないとどうしようもないのでDarwinPortsを使ってインストール。 GHC(Glasgow Haskell Compiler)とかいうのがデファクトスタンダードらしいので、こちらをDarwinPortsでインストールする。 port search ghcと、実行すると ghc lang/ghc…

Haskellの勉強をはじめました。

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門作者: 青木峰郎,山下伸夫出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/06/01メディア: 単行本購入: 25人 クリック: 314回この商品を含むブログ (320件) を見る購入。 …