2017-05-01から1ヶ月間の記事一覧

記憶を引きずりながら進む確率過程

重い… sa :: Double sa = 0.4 sb :: Double sb = 0.3 g :: (Num a, Ord a ,Fractional a) => a -> a -> a -> a -> Double g x y z w | (x+1)/(x+y+2) > (z+1)/(z+w+2) = 1 | (x+1)/(x+y+2) < (z+1)/(z+w+2) = 0 | otherwise = 0.5 p :: (Num a, Ord a ,Fract…

Numeric.Probability を使う〜Haskellの確率的プログラミング

Haskellで確率密度分布を扱ってランダムサンプリングするときにモナドを使う、という話がある こちらの記事によると、それは遡ること2006年のこちらのペイパーとそれが作成したProbabilistic Fucntional Programming用パッケージが始まりだという。 その後、…

事前分布、事後分布、MCMC

事前分布は、パラメタに分布を仮定し、その尤度が計算できることとして決まる a,b,sdに一様分布を設定し、何か具体的な値に対して、その総合的な対数尤度をlogpriorが返す :{ let logprior :: Double -> Double -> Double -> Double;logprior a b sd = sum […

MCMCをやってみる

こちらのページをやってみる やるために、stackで環境を整える stack new hogeして、そのcabalファイルのmainの必要パッケージを以下のようにする executable pfptest-exe hs-source-dirs: app main-is: Main.hs ghc-options: -threaded -rtsopts -with-rtso…

モナドを使うとは〜Haskellの確率的プログラミング

例えば、ベルヌーイ事象を繰り返して、その結果がどうなるか、というのをHaskellでやるとする ベルヌーイ事象の確率質量分布をモナドで作っていれば、2回繰り返しは、モナドを作って、それを>>=で次に渡して、もうひとつのモナドと合体させてモナドを作れば…

Hindley/Milner type systemとHaskell

延々とHaskellの勉強をしてきたけれど、その後でこれ(Functional Programming with Overloading and Higher-Order Polymorphism)を読むと、ああ、Type systemの勉強・Hindley/Milner type systemの勉強をしていたんだな、と解る が、Haskellの諸々の書き方を…

私のためのHaskell〜ひたすら原点回帰〜その4 Haskellで大きな仕事をする[], Functor, Monad は * -> *

意識される対象は、要素それ自体だったり、要素の連なりそれ自体だったりしたし 要素の集合を意識して、それを型と呼んだりした 関数は不特定の要素に定めた処理ルールであったが そのときの不特定要素というのは、型集合の要素であった 型そのものを要素と…

私のためのHaskell〜ひたすら原点回帰〜その3 関数の具体的な行為と抽象的な機能

値を2個取って値を返すことを考える。たとえば足し算 2+3 = 5 は、具体的な2と3を足して5を得る。この具体的な式で表されたものを「関数の具体的な行為」と呼ぶことにする x+y = z は、値xと値yとを足して値zを得る、という「この関数の抽象的な機能」を表…

私のためのHaskell〜ひたすら原点回帰〜その2 値・演算の階層構造、型・演算の階層構造

演算を拡張する 前の記事では、「あ」は型によって集合の要素となり、「あ」のうちの演算は値を取って値を返すものであったので、「型」を取って「型」を返す具体的な変化の集合でもあった 「○○を取って、××を返す」というメカニズムで「○○」と「××」は「型…

私のためのHaskell〜ひたすら原点回帰〜その1 値、演算、型

まだすらすらコードは書けないけれど、Haskellが実装しようとしていることと、それがどれくらいの徹底度で実装が進んできているのかのイメージはつかめた。 イントロ Haskellは(関数型言語として)、こういうことがやりたい、という『何か』のためにある 『何…

私のためのHaskell〜 [] リストを理解する その2

だんだんに性質を付与する リストには、Functorという型クラスの性質と、Applicativeという型クラスの性質とMonadという型クラスの性質が付与されていた。 この3つの型クラス、その性質はには順序がある。 Functor型クラスの性質が1番はじめで、次がApplic…

私のためのHaskell〜 [] リストを理解する

リストの手前と、リストの定義 Haskellの「大元」というのがある それをコンパイルしないと使えないので、コンパイラがあるが、GHCはそのひとつ GHCコンパイラは複数のモジュールファイルを持っていて、その定義がGHCによるコンパイルで使われる 基本的にはH…

基本〜私のためのHaskell〜総集編

Haskellの基本の基本を運用するにあたって設定されている仕組み〜これもプログラミング上は基本 型はグループ化される その1 型のそれぞれを要素とする型集合がある。特徴を共有する型を亜集合として取りまとめる。その亜集合を型クラス・クラスと呼ぶ。 そ…

基本の基本〜私のためのHaskell〜総集編

まとめるには、もう少し時間がかかる。。。 Haskellの基本の基本のき 原子のような要素とそれを関数で組み合わせたものとをひと塊として捉えている 型は整数型のような要素的なものもあり、それを足し算と掛け算のルールで複雑にしたものも型とする。代数的…

私のためのHaskell〜自作タイプだけで作る世界

はじめにMyType1なるタイプを定義する。deriving Showは表示を可能にするためのおまじない MyType1はAかBかの2つの実体を持つだけ MyType1だけがある世界でも関数は定義できる MyType2を加える。MyType1とMyType2とを行き来する関数が定義できる MyType3を…

私のためのHaskell〜その構成要素

Haskellのプログラムはタイプの連なり Haskellは、タイプの集合を持ち Haskellのプログラムはタイプの連なった構造として表現する。その構造の構成要素(構成タイプ)の数は1以上 プログラムの中で、タイプの直線的な連なり(紐)となるものは関数と呼ばれる。要…

Haskellをdesugarして覚えることを減らす

do記法はモナドのsugarだ、などと言われます do a b は a >> b こちらの書き方 do a <- hoge b <- hige a は a >>= b 違いは、">>"で繋がれている2つの処理は単に、2つを実行するだけで、a bの間でやりとりはないのに対し、a >>= bは、aの結果(の中身、モ…

Haskellを初めから

こちらがよいことに気づいた Stackを入れて、新しいプロジェクト "h170505"を作る 冒頭のサイトにも紹介されているOpenGLTutorial1をやってみる Main.hsの書き換え .../h170505/app/Main.hs を書き換える import Graphics.UI.GLUT main :: IO () main = do (…

乱数を使う

こちらのMain.hsを動かす import System.Random.MWC main :: IO () main = withSystemRandom . asGenIO $ \gen -> do -- 基本的な乱数生成 r0 <- uniform gen :: IO Int r1 <- uniform gen :: IO Double r2 <- uniform gen :: IO Bool print (r0, r1, r2) --…

OpenGLTutorial2

立体的にCubeを描き、回す .cabal name: h170505 version: 0.1.0.0 -- synopsis: -- description: homepage: https://github.com/githubuser/h170505#readme license: BSD3 license-file: LICENSE author: Author name here maintainer: example@example.com…

Haskellで乱数

これを動かしたい いろいろ調べもの 調べもの1 調べもの2 調べもの3 調べもの4 調べもの5 stack ghci import System.Random import ./models/Dice.hs import ./src/Control/Monad/Bayes/Simple.hs let g = mkStdGen 0 random g :: (Int,StdGen)

構文解析 48時間でSchemeを書こう

Ubuntu用のlibghc-parsec-devをインストール sudo apt-get install libghc-parsec3-dev テキストに沿ってファイル file2.hs を作ってコンパイルする import Text.ParserCombinators.Parsec hiding (spaces) import System.Environment import System.IO impo…

最初の一歩〜48時間でSchemeを書こう

最初のファイル "file1.hs" module Main where import System.Environment main :: IO () main = do args <- getArgs putStrLn ("Hello, " ++ args !! 0) ghc -o hello --make file1.hs ./hello r 第二のファイル file1_1.hs module Main where import Syste…

48時間でSchemeを書こう

Haskellの像が見えてきたので以前やりかけてやめてしまった"48時間でScheme"の冒頭を再度、写経してみる

かじりかけのHaskell評

Haskellを覚えるときに、どういう位置づけにするか Haskellは代数的にプログラミングするのが好きなのであって、個別の事例は「たまたま見たかったものを見ることにした」という位置づけ Haskellでは次のような「もの」がある 「階層」を表す用語 「階層に帰…

Chapter4 Sets, Types and Lists

importしてみて、使ってみる Data.Listなるものをimportしてみる その中のnubという関数を使う(重複を除いて出してくれる) それをIO()標準出力させてみる print関数を使えば、STALモジュール内の関数の結果を表示できる(Show属性を持つタイプなら) module ST…

Chapter1 Getting Started〜Haskell モジュールの写経

とにかく写経してGS.hsなるファイルを作る Stackがデフォルトで作ったLib.hsをまねて作る 作成した「わり切れるかの判定」関数も外から参照可能にする Lib.hsと同じくsrcディレクトリに置く app以下にあるMain.hsにGS.hsをインポートさせ、GS.hsのsomeFuncGS…

Chapter 2 Talking About Mathematical Objects

中置演算子の定義。演算優先度を整数で指定する。中置演算子は ( ) でくくると、通常の演算子 module TAMO where someFuncTAMO :: IO () someFuncTAMO = putStrLn "TAMO" {- 向きによらない中置演算子の定義 x ==> y (==>) x y は同じ 演算子には、優先順位…

Stackのプロジェクト環境〜Haskell モジュールの写経

The Haskell Road To Logic, Maths And Programming (Texts in Computing)作者: Kees Doets,Jan van Eijck出版社/メーカー: Kings College Pubns発売日: 2004/05/07メディア: ペーパーバック クリック: 3回この商品を含むブログ (2件) を見る こちらにコード…

Haskell プロジェクトを作ってみる〜私のためのHaskell再入門3

まず。(Stackとは、はこちら) stack new ry して、"ry"なる名前のプロジェクトを作る。 のように、諸々のファイル・フォルダができる。 stack install とすると、必要なパッケージを取り入れながら、回るようにしてくれる このコマンドライン出力からわかる…