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

やはり年末は・・・

年末は忙しい・・・はずなんだけども,妙に定時帰りができる.業界的にはかな〜りまずい気もするが,それなりに忙しい.400ページの初校出稿後,中一日で責了とかいう「それでいいのか!?」みたいな案件もあったり(日本人なら誰でも知ってる出版社なんだが…

周回遅れ甚だしい

思いっきり周回遅れの上に,朝日の青Beの記事で思い出したという体たらく.インストールして放置してあった「ちょろめ」を使ってみました.・・・何これ.体感速度違うよね.測る気も分析する気もないけど,体感は間違いなく速い.Haskell,とくにMonad/Monad…

nautilus-script + zenity

(注): nautilus-script + zenityの具体的なこと何も書いてないです.ごめんなさい.仕事ではどういうわけかLinuxを使ってたりするんですが,最近zenityというGNOMEのツールを見つけました.GNOMEのダイアログをシェルスクリプトとかから呼び出せるもので…

いろいろ書き散らかした

いろいろ書き散らかしているうちに結構な分量になっているような気がします.そろそろ整理と修正・補正してブラッシュアップすべきかも.最近気がついたのですが,MonadFixの雑文が別のところからリンクされてたりします.

Monad TransformerのTutorial

Monad TransformerのTutorialを発見.読みやすそうなので読んでみることに.簡単なインタープリータを徐々にmonadicにしていくとのことで,ErrorTによるエラー処理もあるようです. 半分くらい読んだ 2.2節まで読みました.読みやすい英語で中身も面白いです…

mftrace for Win32

TeX

角藤先生がmftraceのWin32版を公開してくださいました.以下の手順でインストールできます.これでMetaFont形式からtype1をWindowsで生成する手段が増えました.textraceよりも使いやすいです. mftrace-w32.tar.bz2を入手 TeXMF treeに上書き解凍する イン…

phorth---(その1.7)main関数---簡単な対話型シェル

デバグ オペレータsubの定義が間違ってました. -- procExp i (Invoke "sub") = procStack i (\(x1:x2:xs) -> (x1-x2):xs) procExp i (Invoke "sub") = procStack i (\(x1:x2:xs) -> (x2-x1):xs) スタックの順番を間違えてました. 簡単な対話型シェル(REPL…

phorth---(その1.6)積み残したrollの実装

rollの実装 保留していたrollに戻ります. rollはn個の要素をk回だけ「上に」巡回させます.例えば, 10 20 30 40 50 3 1 roll => 10 20 50 30 40 10 20 30 40 50 3 2 roll => 10 20 40 50 30 10 20 30 40 50 3 3 roll => 10 20 30 40 50 という具合です.大…

phorth---(その1.5)算術・スタックオペレータの追加

算術オペレータの追加 普通に使われる演算で以下のものを追加します.PostScript Level 1のサブセットです. add : n1 n2 add => n1+n2 sub : n1 n2 sub => n1-n2 mul : n1 n2 mul => n1 x n2 idiv : n1 n2 idiv => d mod : n1 n2 mod => r (n1 = n2 x d +r …

phorth---(その1.4)オペレータ定義の仕様変更2

Evaluator さらに,スタックも type Stack = [Stackable] から type Stack = [Stackable] data Stackable = Pushed Literal | Opname Word | Code AST deriving Show と変更します.つまり「新しいオペレータの名前」と「コードのブロック」もスタックに積め…

phorth---(その1.3)オペレータ定義の仕様変更1

Parserの改造 新しいオペレータを定義する際に /a { 1 2 } def という構文を使って,これをパースして [NewWord "a" [Push 1 ,Push 2]] というASTを構築しました.これを評価すると Interp {stack = [], dict = fromList [("a",[Push 1,Push 2])]} という状…

相加平均・相乗平均の不等式の新証明

どうやら一般の相加平均・相乗平均の不等式の「新しい証明」,それもものすごく初等的な証明が見つかったようです.http://jipam.vu.edu.au/issues.php?op=viewissue&issue=97上のURLの「56 A Simple Proof of the Geometric-Arithmetic Mean Inequality Yas…

phorth---(その1.2)Evaluator

評価器(Evaluator) ASTが作れるようになったので,評価器の番です.harrorth--では省いた「新しいオペレータの定義」があるので,その部分を作らないといけません.新しいオペレータは「名前」,「内容」そしてその間の「対応関係」であり,また定義したら…

数学ガール---フェルマーの最終定理

いろいろやってて時間がとれず,やっと購入,読了.そう簡単に店頭から消えるわけはない(間違いなく初版一刷の部数は最低でも一万くらいはあるはずだから)ので,悠長に構えていたわけですが.やはり結城さんらしいというか,ご本人にもチャットで申し上げ…

phorth---(その1.1)AST+Parser

Harrorthを適当にいじった結果なんとなく雰囲気が分かったので,好きなようにHarrothを真似て作ってみます. 文法を(いい加減に)考える forthの文法では,何かのコード片に名前をつけるのは :NAME <code>; とします.:(コロン)の後,;(セミコロン)の前の空白</code>…

(迷題)最大の自然数は1である

2008-08-23経由,小島さんのエントリ.「最大の自然数は1」の証明.背理法などの論理の危うい一面を端的に示した面白い例だと思う.要は数学というか論理というかの基本中の基本 偽の命題からは全てが導かれる が重要なわけです.これ経済とか政治とかでやら…

Harrorth--を考える

始めに forthという言語があります.逆ポーランド記法(RPN)を使うちょっと見た目が変わった言語ですが,こっそりいろいろな形であちこちに使われています.例えば(商業的な)印刷には欠かせないAdobeのPostScriptの原型になってたりJavaのVMが似たような…

ちょっと飽きた(笑)Project Euler

Project Euler Problem 17をみてちょっと萎えた.んー,ああいう特定の自然言語および習慣に依存するような問題はなんとなくなんだなあ.解くこと自体はきっとすぐなんだろうが.ということで,何か新ネタを物色・・・というか「harrorth」とか「S式」とか,…

Problem 16

2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.What is the sum of the digits of the number 2^1000? 訳 2^15 = 32768 であり,その各桁の数の和は 3 + 2 + 7 + 6 + 8 = 26 である.では,2^1000の各桁の和を求めよ. Haskell シンプ…

Problem 15

Starting in the top left corner of a grid, there are 6 routes (without backtracking) to the bottom right corner.(figure is omitted)How many routes are there through a grid? 訳 の格子の左上隅からスタートして,右下隅に,逆戻りしないで到着す…

Project Euler Problem 14(その4)

コラッツ問題でなんとか答えはでていますが,せっかくStateモナドを頑張ったので,それで書いてみます.StateモナドがMonadFixのインスタンスだとかは・・・スルーします. import Control.Monad.State import Data.List {- Project Euler Problem 14 e14-8.…

MonadFixの理解のために(2)---リストモナドでmfix考える4

ここまではpairwise swapという具体的なもので考えてきたので,こんどは抽象的に攻めてみます.MonaFixのインスタンスのmfixには満たすべき性質があるのでした. -- purity mfix (return . h) = return (fix h) -- left shrinking (or tightening) mfix (\x …

MonadFixの理解のために(2)---リストモナドでmfix考える3

前回はリストモナドでlistfixという関数をでっちあげてそれが期待した動作をすることを主張しました.実際コードを走らせて見れば動きます.今回はまずは,その動きを追いかけてみます. pairwise swapでリストモナドのmfixを追いかける 面倒なので,listfix…

MonadFixの理解のために(2)---リストモナドでmfix考える2

後だしジャンケンかつ自分を納得させるためだけのような内容です(^^; 再帰的な束縛を模索する ここでは強引な議論を展開します.先走るとリストモナドのmfixのあの妙な定義を引っ張り出す「発見的手法」を無理やり延々と展開します.前回の考察の続き.pairw…

MonadFixの理解のために(2)---リストモナドでmfix考える1

かなりfixを使ってみたので,そもそもの本題に向かいます. リストはMonad ひとまず,リストはモナドであることの定義は instance Monad [] where m >>= k = foldr ((++) . k) [] m m >> k = foldr ((++) . (\ _ -> k)) [] m return x = [x] fail _ = [] と…

MonadFixの理解のために(1)---fixを考える4

decWithMin問題 まだ具体例にこだわります.もうfixから離れている気もしますが,まあ,再帰すなわちfixということで.さて,Otter_OさんのところのArrowの話題ArrowLoopとCircularPrograming - 取り急ぎブログですに関連して(私はArrowって何?の人です)…

MonadFixの理解のために(1)---fixを考える3

しつこく再帰処理とfixに粘着します.果たして,mfixにたどり着くのか(苦笑). repmin(A recursive do for Haskell, by Levent Erk\"ok, John Launchbury, Haskell Workshop 2002, pages: 29-37. Pittsburgh, Pennsylvaniaより) 次のお題は「repmin」で…

数学ガールの続編

寝ようと思ったけども・・・・結城さんのところで続編のアナウンスがあって,しかもFermatだとあったので,中身の予想をしてました(主に通勤の電車にて(笑)).けど,勝手に書いていいものかと思ってたのですが,結城さん本人がネタばらし的なエントリを…

MonadFixの理解のために(1)---fixを考える2

具体例を頑張ってみます.fixに無名関数を与えるか,名前をつけるかは見やすくなる方を独断で決めて使うことにします. 条件を満たす値の和(プログラミングGauche,p.72より) リストの中から条件を満たす要素だけの和を求めてみます.普通なら条件を与える…

MonadFixの理解のために(1)---fixを考える

Control.Monad.FixとData.Functionにfixなる関数が定義されています. fix:(a->a)->a fix f = let x = f x in x 何か詐欺みたいな定義です.この定義から分かることは fixは関数fに対して,x=f xとなるx,つまりfの不動点(fixed point)を返す ということで…