Haskell

ごく基本。関数ファイルの読み込み、リスト・タプル・集合表記(2)

関数を書いたファイルを保存して、ロードして使う doubleme x = x + x というテキストファイルを"hs0129.hs"という名前で保存して :l hs0129.hs とやれば、読み込んでコンパイルしてくれて doulbeme 3 とやれば使える ghci> :l hs0129.hs [1 of 1] Compiling…

MacでHaskellやり直し(1)

MacでやっていたHaskell環境にトラブル発生、と言うわけで、インストールからやり直し Haskellのインストールはこちらから インストールが終われば、ターミナルを開いて > ghci これで動くので、この勉強会テキストへGo!

タイプ、タイプクラス、インスタンス

タイプを作る Maybeは「なし」と、ただのa タイプはタイプクラスが定義する条件をすべて満たせばタイプクラスのインスタントなる 新しいタイプを作ったら、タイプクラスにderivingすると、「継承」のようなことができるし 新しいタイプに、タイプクラスが要…

すぐに忘れるので、参照先

Haskellの「入門サイト」とかは、「形式」についてが多くて、「あれってどうやるんだっけ?」というghciに戻ってくるとき(このghciの綴りすらうまく思い出せないような、そんな事態のとき)には役に立たない そんなレベルで「とりあえず、参照」するには、 必…

カリー化、ハスケル

こちらにカリー化の話がある こちらにもある 関数として統一的に扱いたい、という気持ちがあるので、関数は引数を一つだけとることにする 複数とるためには、一つ取る関数に一つの引数を取らせ、その引数を一つとった状態にある関数(これは「関数という一つ…

グッドスタイン数列

今日はハスケル勉強会 Integer タイプという無限大桁の型を知る 以前気にして書いたグッドスタイン数列のハスケル関数を使ってみる nでのグッドスタイン数列の最初のm個を表示するには、こちらを使って data Gen = G [Gen] instance Show Gen where show (G …

集合の内包表記、タプル

文字コード ['\t' .. '^'] Prelude> ['\t' .. '^'] "\t\n\v\f\r\SO\SI\DLE\DC1\DC2\DC3\DC4\NAK\SYN\ETB\CAN\EM\SUB\ESC\FS\GS\RS\US !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^" 方程式の近似解を求める [x | x <- [-10,-9.9999 ..…

素数判定、素数の数え上げ、素数関数

Haskellのリストと集合内包表現(だけ)を使って素数判定、自然数の増加と疎の自然数までの素数の数の増加についての関数を作る ある自然数が素数であるかどうかの判定をその数より1より小さい自然数までのすべてで割った余りが0でないかどうかを判定するよ…

HaskellとType Theory

一昨日(20131128)はHaskell勉強会の2回目 Haskell(とそれを含む関数型言語)はType Theory(Wiki記事)と関係があるという Type Theoryは煎じ詰めると"In type theory, every "term" has a "type" and operations are restricted to terms of a certain type."…

HaskellとHiggs粒子

昨日はHaskell勉強会の2回目。3週間ぶり?にHaskell。ちょっと時間が余ったので、こちらものぞいてみる 『Haskellは関数型言語なので、プログラムを書くときは、コンピュータに実行すべき命令列を伝える代わりに、必要となるであろう全ての関数の定義を与…

関数間のコサインを使って位相ずれを見つけて補正する

昨日の続き 余談:Haskellは畳み込み関数foldl(),foldr()を持っていた(こちらとか、こちらとか) # 離散データ # 補間する(補間方法はいろいろあり得る) # 保管した結果、regularly sampled discrete time seriesとなったので # それらについて、離散フーリエ…

駆け足で読む『プログラミングHaskell』3 型とクラス

型とクラス 型とクラスはHaskellの基本概念である 型とは 型とは互いに関連する値の集合である 集合であるから、全体があって、要素があって、要素同士にオーバーラップはない 値が集合をなすとき、型を定義できる クラスとは 複数の型があるとき、型がある…

駆け足で読む『プログラミングHaskell』11 遅延評価

複数の関数を適用するとき、どういう順番で関数適用するかを問題にする 外側から、対、内側から 名前渡し、対、値渡し curry化することと関係がある(順序がわかるようにカッコを明示的に書くとわかる) 無限再帰の場合などでは、値渡しでは停止しないが、名前…

駆け足で読む『プログラミングHaskell』10 型とクラスの定義

型を定義する typeによる宣言(既存の型を使って宣言する) type String = [Char] type Pos = (Int, Int) type Board = [Pos] dataによる宣言(まったく新しい型を宣言する) 取りうる値の集合を定義する その上で関数を定義する data Move = Left | Right | Up …

駆け足で読む『プログラミングHaskell』9 対話プログラム(IOがしたい)

IO型の特殊性 IO型は対話形式にするための仕組み HaskellはIOを除くと、「ファイルにすべてを書き込んで(→コンパイルして)→実行する」〜「いつも同じことをするだけ」という処理を作る Haskellで対話式入出力をするときは、対話の受付口と対話の返却口を開い…

駆け足で読む『プログラミングHaskell』7 高階関数

引数として関数を取ったり、返り値として関数を返したりする関数を高階関数(higher-order function)という 複数の関数の処理を行ったりするときは、結果として関数に関数を引数として渡すことになる curry化は「返り値として関数を返す」こと(らしい)だが、…

駆け足で読む『プログラミングHaskell』6 再帰関数

Haskellではループの代わりに再帰関数を使う 整数に対する再帰は以下のような感じ f :: Int -> Int f 0 =1 f (n+1) = (n+1) + (f n) 「関数fの入出力の型はInt。fに0を渡したら1を返す。それ以外のときは、n+1を渡したら 関数fをnに適用した結果にn+1を加え…

駆け足で読む『プログラミングHaskell』5 リスト内包表記

Haskellで、リストは特別な役割をしているので、そのために知っておくべきことがいくつかある 数学の内包表記 内包表記をHaskellのリストで実現するために 生成器 [1..5]が[1,2,3,4,5]であることにする このように..リストを作ってくれるので「生成器」と呼…

駆け足で読む『プログラミングHaskell』4 関数定義

関数は対応付けるもの 対応付けは値と値かもしれないし、値と関数かもしれないし、関数と関数かもしれない 対応づけは1度とは限らない(x -> y -> z -> wのように3つの対応づけもできる) 関数が失敗することなく対応付けするためにHaskellで決まっているル…

駆け足で読む『プログラミングHaskell』

プログラミングHaskell作者: Graham Hutton,山本和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行本(ソフトカバー)購入: 14人 クリック: 503回この商品を含むブログ (117件) を見る この本はすばらしい。ウェブ上の色々を調べて、ようやく…

型とクラスを理解する過程のメモ

自分の書いたものを消したいくらいだが、このメモは自分で書いた、というそれだけの理由で、自分にとっては価値があるので、残すことにする 型とクラスを調べるために どちらも":info"によって情報を示すことができる(この記事の末尾にそれぞれの表示を示し…

モナドで家系図探索

こちらで父子関係から祖父を探索するHaskell処理を書かれている モナドを使うらしい 家系図探索に使えそう Ancestral Recombination Graphにも使えそう 逆に、無限の伝達規則によってつくられる家系図を描いた上で、無限長の疑似乱数列と組み合わせれば、シ…

Yet Another Haskell Tutorial

3章 Listsは基本 Listsの処理は色々 foldr,foldl Prelude> foldr (-) 1 [4,8,5] 0 Prelude> foldl (-) 1 [4,8,5] -16 ソースコードファイル 色々、ルールはあるけれど、数値を与えて計算するだけなら、以下を"MyTest.hs"というファイルで保存して module My…

Yet Another Haskell TutorialとThe Haskell Programmer’s Guide to the IO Monad

Haskellのチュートリアルはここにリストがあるように、たくさんある 自分の動機は・・・、自分のレベルは・・・、と思って眺める 動機は、Haskellでのもろもろの取り扱いの定義の仕方が知りたい、圏論との関係が知りたい、ということだった 「定義」となると…

車両ソート問題とバブルソートとその一般化

こちらで車両ソート問題における車両の移動をHakellで一般的に取り扱うことを試してみた この問題は「ソート」の問題である では、いわゆる「1次元配列のソート」と同じ枠組みで考えて、「1次元ソートと車両ソートとを同じルール」で取り扱うことを考えた…

Haskellを書いてみよう

あちこち読みかじったので、雰囲気はわかってきたので書いてみる 具体例はこちらでも扱われている「車両のソート問題」 いくつかのソースがこちらにあります 問題は、上手のように引き込み線が複数あって、それらを出たり入ったりできて、一番左から、世の中…

Integerというすごい桁のデータ型

Int型は普通の整数型 Integer型は桁数に制限がない(?) "factorial.hs" factorial :: Integer -> Integer {-factorialの型はIntegerを貰いIntegerを返す-} factorial n = if n == 0 then 1 else n * factorial (n - 1) loadして Prelude> :load "factorial.h…

リストの操作

メモリンク(こちら) Preludeについてのサイト(こちら)でList operationsの項(こちら)を淡々と見ていこう map :: (a -> b) -> [a] -> [b] map _ [] = [] map f (x:xs) = f x : map f xs (a -> b) なる関数(任意の型aの値を型bの値に移す関数)と[a](型aの値の…

cons (:)関数

クイックソートの関数は有名らしい quicksort [] = [] quicksort (x:xs) = quicksort [y | y <- xs, y<x] ++ [x] ++ quicksort [y | y <- xs, y>=x] 見慣れないシンボルが多いので備忘録 "x:xs" これは、x1という要素と、[x2,x3,...,xn]というリストからできた[x1,x2,x3,...,xn]という意味 どうしてそ</x]>…

Haskellの作り

資料はHaskell 2010 Language Report(こちら) I Haskell 2010 Language 構成要素 Identifier(識別名)を付けて扱うもの(Namespaceに関すること) 6種類の名前をつけて扱うもの Values(値) (1) Variables(変数) (2) Constructors(構成子・コンストラクタ) Type…