2009-01-01から1年間の記事一覧

F# をちょっと動かしてみた。

F#

対話モード。 > fsi Microsoft F# Interactive, (c) Microsoft Corporation, All Rights Reserved F# Version 1.9.6.2, compiling for .NET Framework Version v2.0.50727 Please send bug reports to fsbugs@microsoft.com For help type #help;; > 1;; val…

PhotoShare の一覧を作る

iPhone の写真共有SNSであるPhotoShare を始めてから明日で1年になります。 メッセージの交換目的というより、簡単な記録、メモとして始めたのですが、古い写真にアクセスするのが簡単でありません。 そこで、Webにインデックスを作成しようと思い、HTMLタ…

Lisp のリストを表示する関数

Lisp のリストを表示する関数を作ってみた。 data Symbol = I Integer | S String | Nil | C Cell deriving (Show, Read, Eq) data Cell = Cell { car_ :: Symbol, cdr_ :: Symbol} deriving (Show, Read, Eq) cons a b = C Cell { car_ = a, cdr_ = b } car…

Lisp のセルみたいなものを定義してみる。

Cell は Symbol型の car と cdr の値を持つ。Symbol型は Int または String、Nil、そして、Cell 型である。 data Symbol = I Int | S String | Nil | C Cell deriving (Show, Read, Eq) data Cell = Cell { car :: Symbol, cdr :: Symbol} deriving (Show, R…

モンティ・ホール問題(2)

ドアの選び方であなたの賢さが分かる!?——モンティ・ホール問題とは あなたはテレビ番組で商品当てゲームに挑戦しています。あなたの前には3枚のドア があり、1枚のドアの先にはあなたが欲しい物が置いてあり(アタリ)、残る2枚のド アの先には何も置いてあ…

モンティ・ホール問題

ドアの選び方であなたの賢さが分かる!?——モンティ・ホール問題とはすっきりしないのでシミュレーションしてみました。 ゲームのルール 1. 3つのドア (A, B, C) に(景品、ヤギ、ヤギ)がランダムに入っている。 2. プレイヤーはドアを1つ選ぶ。 3. プレイヤ…

「生きるためにしなければならないこと」と「やりたいこと」

「Life is beautiful: AppBankインタビュー」より。 「生きるためにしなければならないこと」と「やりたいこと」を同じベクトルに置くことができれば人生が楽しくなる 「人のためになること」と「自分のためになること」を同じベクトルに置くことができれば…

型クラスは異なるデータ型に共通する操作を定義する。

型クラス(type class)は異なるデータ型に共通する操作を定義する。 class SayHello a where sayHello :: a -> Stringその1 Person 型 data Person = Person { name :: String, msg :: String} deriving (Eq, Ord, Show)Person 型の SayHello インスタンス in…

構造体のような型を定義してみる

data Person = Person { name :: String, age :: Int} instance Eq Person where (Person name1 age1) == (Person name2 age2) = (name1 == name2) && (age1 == age2) instance Show Person where show (Person name age) = "Person name=" ++ name ++ " age…

平衡木を使ってみる

HashTable は IO 型なので難しいから平衡木。 > :m +Data.Map > let t = empty > t > :t t --=> t :: Map k a > t --=> fromList [] 要素を挿入してみる。 > let t2 = insert "key" "value" t > let t3 = insert "1" "1234567890" t2 > t3 fromList [("1","1…

配列を使ってみる

Array を使ってみる。 > :m + Data.Array -- モジュールの import > :t listArray listArray :: (Ix i) => (i, i) -> [e] -> Array i e -- リストから配列を作ってみる。 > listArray (0,2) ["Hello","world","Hoge"] --=> array (0,2) [(0,"Hello"),(1,"wor…

Data.HashTable を使ってみる。

Haskell のお勉強 10. 種々のデータ構造を参考にData.HashTable を使ってみる。 Prelude> :m + Data.HashTable Prelude Data.HashTable> :set prompt "> " > > h <- new (==) hashString :: IO (HashTable String String) > :t h h :: HashTable String Stri…

関数の合成

> let ab a = a+10000 > :t ab ab :: (Num a) => a -> a > let cd c = c+2000000 > :t cd cd :: (Num a) => a -> aab の結果をcdの引数とする。 > cd (ab 1) 2010001cd (ab 1) の構文糖衣。 > cd $ ab 1 2010001cd と ab の関数を合成し、引数に1を渡す。 > …

Haskell の and , or は最後まで比較する

src/GHC-List.html#and List の中の論理値が全て True であるかどうかチェックするには、Falseが出現した時点で成立しない。ここでチェックをやめてもいいのだけれど Haskell は fold を使っているので最後までチェックしている。 Special folds という分類…

http://ja.wikipedia.org/wiki/Haskell の逆ポーランド記法評価器

-- 逆ポーランド記法評価器 -- calc :: String -> [Float] calc = foldl f [] . words where f (x:y:zs) "+" = y+x:zs f (x:y:zs) "-" = y-x:zs f (x:y:zs) "*" = y*x:zs f (x:y:zs) "/" = y/x:zs f xs y = read y : xs 分かりやすく変数名を変えてみる。 ca…

foldr の実行順序

Prelude> foldl (+) 10 [1 ,2 ,3 ] 16 Prelude> foldr (+) 10 [1 ,2 ,3 ] 16 Prelude> foldl (\a b -> a + b) 10 [1 ,2 ,3 ] 16 Prelude> foldr (\a b -> a + b) 10 [1 ,2 ,3 ] 16 違いが分からないので文字列の連結をさせてみる。 Prelude> foldl (\a b -> …

今日の日付を文字列で取得する。"2009/06/03"

Haskell には System.Time と Data.Time のふたつがあるようだ。 Prelude> :m + System.Time Prelude System.Time> getClockTime Wed Jun 3 09:45:04 東京 (標準時) 2009getClockTime で取得した値を CalendarTime に。 Prelude System.Time> tm <- getClock…

Haskell で Basic 認証

Basic 認証 の必要なアクセスをAuthentication.hsを参考に動かしてみた。 import Codec.Binary.Base64.String import Network.HTTP import Network.URI -- Sends an HTTP request to a server identified by uri. -- The username and password are sent wit…

Web のテキストを取得

import Network.Browser import Network.HTTP get url = do rsp <- simpleHTTP (getRequest url) fmap (take 300) (getResponseBody rsp) PS C:\Users\haskell> ghci GHCi, version 6.10.2: http://www.haskell.org/ghc/ :? for help Loading package ghc-pr…

Haskell から Ruby を呼ぶ

System.Win32.Com の使い方が分らないので「趣味的にっき / ] iconvを外部プロセスとして呼び出して漢字コードを変換する」を参考に RubyからCOMを呼んで、そのRubyをHaskell から呼ぶことにしました。 module Main (main) where import System import Syste…

System.Win32.Com の使い方を知りたい

Windows COM は全く分からないのですが、Ruby の win32ole は使ったことがあるので、win32ole.c を追ってみます。 > ghci GHCi, version 6.10.2: http://www.haskell.org/ghc/ :? for help Prelude> :m +System.Win32.Com Prelude System.Win32.Com> coIniti…

Windows 開発環境構築(3) Cinnamon.Nkf が動いた

(2)はbuild は出来たがインストール出来ない・・・まででした。 インストールが出来ないのはライセンスファイルの問題。そこで、正常にインストール出来たcabalのライセンスの行をコピー。 ライセンスファイルもそのファイルをコピーすると入ったけれど、ラ…

√2 を計算してみた

ザリガニが見ていた...。√2や円周率πの驚きを参考にHaskell の練習に√2 を計算してみました。 {- 1 2 5 12 29 70 169 408 985 ... 次の数を求めるには、今の数を2倍して、前の数を足す。 例:5の次は... 5 × 2 + 2 = 12 √2 ≒ 408 ÷ 985 + 1 = 1.4142131979 -…

URL特殊文字のエスケープ

どう書く?org (URL特殊文字のエスケープ)を動かしてみる。 module Main (main) where import Network.URI import Codec.Binary.UTF8.String (encodeString,decodeString ) import qualified System.IO.UTF8 as U -- Haskell String を UTF-8 フォーマットの…

Windows 開発環境構築(3)

Windows PowerShell で nkf を使用すると正常に動作しない。DOS窓ならおk。 Windows PowerShell PS D:\haskell> echo "ウィキペディア" ウィキペディア PS D:\haskell> echo "ウィキペディア"|nkf -w ??????? PS D:\haskell> echo "ウィキペディア"|nkf -g …

URL特殊文字のエスケープについて整理しておく

Haskell の CGI がうまく動かないので Ruby を使用して URL特殊文字のエスケープについて整理しておきます。 irb(main):004:0> URI.escape("あ") => "%E3%81%82" irb(main):008:0> uri=URI.escape("あ") => "%E3%81%82" irb(main):011:0> URI.unescape uri =…

cabal コマンドによるインストール

今まで wget http://xxxxxxxxxxxxxxxx tar xf xxxxxxxxx cd xxxxxxxxx rughc Setup.hs configure rughc Setup.hs build sudo rughc Setup.hs installってやっていたよ。・・・Orz $ sudo cabal install utf8-string 'utf8-string-0.3.4' is cached. Configur…

Windows 開発環境構築(2):cinnamon-0.2 インストールメモ

cinnamon-0.2 をインストールしようとしたメモ。iconv では挫折したので cinnamon-0.2。 > runghc Setup configure Configuring cinnamon-0.2... Warning: No 'build-type' specified. If you do not need a custom Setup.hs or ./configure script then use…

Windows 開発環境構築(1)

hdn:開発環境構築を参考にして、っていうか真似して開発環境の構築。 reimp : MSのツールで作ったライブラリを mingw32、cygwin から使えるようにするためのツールらしい。iconv.def を作るのに使う。mingw-utils に含まれている。 libiconv を Windows の D…

iconv.dll ファイルの読み込みに失敗する・・・Orz

> ghci GHCi, version 6.8.3: http://www.haskell.org/ghc/ :? for help Loading package base ... linking ... done. Prelude> :m + Data.ByteString.Lazy Prelude Data.ByteString.Lazy> :m + Codec.Text.IConv Prelude Data.ByteString.Lazy Codec.Text.I…