Parse::RecDescent (3)

左結合な減法,つまり「1-2-3」は「(1-2)-3」であって「1-(2-3)」ではない,ということを解決する方策をHigher-order Perlの8.4節からもらってきます.左結合を実現するのに,単純に expression : expression "-" atomとしてしまうと,expressionを処理する…

Parse::RecDescent (2)

単純な足し算だけに続いて,引き算もしたいということで,単純に拡張します. use strict; use warnings; use Parse::RecDescent; my $grammar=q( expression : atom "+" expression { $return = $item[1] + $item[3] ;} #引き算を追加 expression : atom "-…

Parse::RecDescent (0)

仕事でどうにもparserを書かないといけなくなるような気がしてます.なんかXMLへの変換とかさせられそうな雰囲気をびしびし.LaTEX2HTMLもそのための伏線.ということで,Parse::RecDescentも考えよう.HaskellのParsecだとマニアックすぎてだめかもしれない…

Vistaにインストールした.

LaTeX2HTMLをVistaにインストールしました.インストールは http://www.phys.asa.hokkyodai.ac.jp/osamu/l2h2002-2/l2h.html にあるとおりで一切問題ありません.さて・・・どうカスタマイズするかを考えねば.

とりあえず復活

それだけ

Parse::RecDescent (1)

Higher-Order Perl(以下HOP)の8.2節の文法をさらにシンプルにして「足し算のみ」を考えます.足し算の文法として以下のものを考えます. expression -> atom + expression | atom atom -> /\d+/ なんか,いろいろなものをチャンポンにした表記ですが,表記…

初期設定の覚書

Vista化にともない,PowerShellも入れなおしました.いくつかはまる割には情報の少ない(というか,PowerShell自体の情報がそろえほど多くない)ことを書いておきます.初心者の備忘録でも枯れ木も山の賑わい,ないよりはましでしょう. スクリプトの実行許…

パソ壊れた

メインで使ってたパソコンがめでたく昇天。電源周りがいかれたっぽく,最初は電源だけ取り替えようとしたけども,筐体と電源が見事に一体化してて断念.いきなりVISTAに買い替え.HDDとかFDDははずして,そのうちデータを取り出して流用しよう.CPUとメモリ…

やはり年末は・・・

年末は忙しい・・・はずなんだけども,妙に定時帰りができる.業界的にはかな〜りまずい気もするが,それなりに忙しい.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 …