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

小島寛之さん

textfile.org経由で,小島さんの話題.小島寛之さんというと私には,SEGの中学数学のリーダーというイメージです.中学校のユークリッド幾何と「原論的ユークリッド幾何」の橋渡しになるような問題提起的な問題や「ロバの橋」を真正面から扱ったテキストは面…

TeXでJIS2004を比較的気楽に使う

TeX

前回書いた件の続き.要はJIS78のCmapの代わりにJIS2004のCmapを使えばよいだけです.全くパラレルに準備すればよいだけです.とりあえず,サンプルのマクロとソースを晒しておきます.要は必要なところだけ「フォント切り換え」してしまい,出力機側のCmap…

(追記)直接JIS X 0213:2004を使える

TeX

ttkさんによる JISX0213-2004-H/V を使えば map さえ書けばJIS2004のグリフを出せます.要整理

JIS78を使ってVistaのJIS2004文字とXPの文字を共存させる

TeX

準備とdvips+Distiller TeXは文字の字形には関与しません.したがって,例えば「葛」などはXPでは「ヒ」のタイプ,Vistaでは「人」のタイプになります.ところが,JIS2004文字には古い78年のJISに字形を戻しているものが結構あります(どれくらいあるかは個…

TeX原稿で入稿する人へ

TeX

頼むから変なマクロを使うな.バグだらけのマクロを解析して「適切に動くように修正」するのはゼロから構築するよりも,難解かつ疲労する作業なのだ.自分でできないなら,美文書のような書籍を読んで「標準的」なことのみを行って,できないところは「こう…

疲れた

馬車馬のように働いてた.すっかりHaskellとも縁遠くなった.存在証明で更新してみる(苦笑)

Parsec --- 2.5 Sequences and separators (3)

sepBy1を使うことで「英語の文」を単語のリストに分解するパーサをsentenceを作ります. word:: Parser String word = many1 (letter <|> digit) sentence:: Parser [String] sentence = do words <- sepBy1 word separator oneOf ".?!" return words separa…

Parsec --- 2.5 Sequences and separators (2)

many/many1はパースしたものを返しますが,パースしたものを返さないskipMany/skipMany1というパーサコンビネータも用意されています. skipMany :: GenParser tok st a -> GenParser tok st () skipMany1 :: GenParser tok st a -> GenParser tok st () |ha…

Parsec --- 2.5 Sequences and separators (1)

「単語」をパースするパーサwordを考えてみます.ここで「単語」というのは一つ以上の「大文字・小文字のアルファベット」から構成されます. word:: Parser String word = do { c <- letter ; do { cs <- word; return (c:cs) ;} <|> return [c]; } do記法…

GHCのライブラリのソースコード

前に,ライブラリのソースコードの所在が分からないと書きました.たしかにGHCをインストールすると見当たらないのですが,GHCそのもののソースコードには入ってるのではなかろうかと思い至り(遅い(^^;;),GHC6.6.1のソースコードを入手,解凍してみました…

parsec --- 2.4 Adding semantics

ただパーサを書いて何をパースしたか出力するだけでは意味がないので,意味のあるものを返そうというお話.前に作ったparens parens::Parser () parens = do char '(' >> parens >> char ')' parens <|> return () を書き直して,括弧が何重になってるかを数…

Parsec --- 2.3 Predictive parsers

Parsecの選択 は「predictive」だとのこと.predictive,予言的.最初のパーサが入力を一切消費しないときのみ,次のパーサに処理が進むということらしいです. testOr::Parser String testOr = string "(a)" <|> string "(b)" というのを作ってみると *Main…

Parsec --- 2.2 Sequence and choice

パーサをつなげてみようというお話.Parserはモナドだからdo記法でつなげることができます. openClose:: Parser Char openClose = do char '(' char ')' これで () だけをパースするパーサになるわけですか. *Main> parseTest openClose "()" ')' *Main> p…

ptexlive

TeX

teTeXがobsoluteになって久しく,texliveが次期標準になりつつありますが,ついに土村さんがptetexの後継としてptexliveを公開されました.試すのは週末になりそうです.それにしても暑くてばてばてです。。。

Parsec --- 2.1 Running a parser

``Parsec, a fast combinator parser''をきちんと読んでみます.関係ないですけど,このドキュメント,誰がどうみてもLaTeX2e組で,PDFはdvipdfmで生成されてますね.閑話休題. 入力したソースは全部p.hsに保存することにして,ghciで実行します. ___ ___ …

本が出ませんね

Haskell本,それも日本人による日本語の本の三冊目以降が出ませんね.Haskellの「尖がった」ところが前面にでるような本が出てくれると勉強になるのですが.とりあえず現在頑張ってParsecのドキュメント読み中. ParsecでRPNからASTを作る なんてくらいのこ…

\defと\edef

TeX

TeXのマクロの基本は\defなのですが,TeXのマクロは「単なる文字列の置き換えに過ぎない」という根本的な大原則があります.この原則を踏まえないでTeXのマクロを作ろうとすると絶対にいつかしっぺ返しをくらいます.例えば \def\temp{太郎} \def\marcoA#1{\…

\defの修飾子

TeX

TeXでマクロを定義するには\defを使います.しかし,この\defはスコープ(TeXではグループと呼ばれる)に影響されるので,同じスコープ内でのみ有効です.これを問答無用でグローバルにするための修飾子が\globalです.TeXのマクロは「動的スコープ」を持つ…

「ふつける」のexpandPattern,わかんなくなった

「ふつける」でソースは省略されているexpandPatternを,ちょっと前に練習がてら自前で実装したんですが。。。今見るとまるで分からない(-_-;;。だめだめ。parsecは忘れてるわ,そもそも自分が作った中間処理の関数が何をしてるのかが不明.コメントは冗長す…

有限リストの連結・改

リストの連結で,同じリストを連結させようとすると循環することに気がつきました.ということで,複製処理を追加です.さらに第一引数のリストを破壊してしまうことにも気がついたので修正です. sub Lconcat{ my $a=shift; my $b=shift; $b=Lduplicate($a)…

暑い

とにかく暑い・・セミは夜中まで元気.ふさふさおけけで散歩してるワンコも暑そうです.そんな中カレーを作ってたらますます暑くなった(苦笑).

有限リンクトリストの長さ,複製,最後の要素,最後だけ除いたもの

sub Llength{#長さ my $l=shift; my $len=0; return 0 unless Lhead($l); return Llength(Ltail($l))+1; } sub Lduplicate{#複製 my $l=shift; return [Lhead($l),undef] unless Ltail($l); return [Lhead($l),Lduplicate(Ltail($l))]; } sub Llast{#最後の…

\markboth/rightは展開される

TeX

TeXにおいて分かりにくいものにマークの概念があります.マークの詳細には触れませんが,柱などに「何章」とか「何節」という本文の場所を示すものを出力するための機構だというくらいの理解でとりあえずは問題ないです.もっとも,以下の内容はマークという…

Lmap/filter の引数に $_ を

Lmap/filterの第一引数には sub を省略した無名サブルーチンを使えますが,そのサブルーチンの引数は一個で,$_[0] を使います.一方,Perlの組み込みのmap/grepでは,デフォルトの $_ を使います.そこで,Lmap/filterでも同じように $_ に変更してみます.…

有限リンクトリストのgrep,filter

mapの次はgrep.名前をfilterにします. sub filter(&$){ my ($f,$l) = @_; return unless $l; my $temp=head($l); if ($f->($temp)){ node($temp, &filter($f,tail($l))); }else{ &filter($f,tail($l)); } } filterはリンクトリストのノードを一個一個たど…

有限リンクトリストのmap

sub Lmap(&$){ my ($f, $l) = @_; return unless $l; node ($f->(head($l)), Lmap($f, tail($l)) ); } listのmapということで,Lmapとしました.Higher-Order Perlでは,transformという名前になっていますが,mapの方が短いので(^^;.これを実行してみると …

半角カタカナ

TeX

2007-07-28さんのところで発見.TeXネタ.いわゆる「半角カタカナ」*1ASCIIでいうところの128番から256番の文字はTeXでは鬼門です.日本で標準的なpTeXでは,ソースの文字コードによって SJISの場合は無視(組版には現われない) JISの場合はエラー(コンパイル…

疲れた

仕事が忙しかった.疲れた.頼むから25日のPM3:00と26日のPM2:00に持ってきて,27日のPM3:00までに223ページ+53個の図版修正なんてやめてくれ.他の案件がほとんど止まってしまったではないか.カレンダをみると,ここに何か書いてる日とそうでない日が見事…

有限リンクトリストの連結

二つの有限リンクトリストを連結してみます.つまり, $list1= [ 1, [ 2, [ 3, undef] ] ]; $list2= [ 10, [20, [30, undef] ] ]; から $list = [ 1, [ 2, [ 3, [ 10, [20, [30, undef] ] ] ] ] ]; を作る操作です. sub concat{ my ($a,$b)=@_; my $c = $a;…

リンクトリストの定義

HOP(Higher-Order Perl)にしたがって,リンクトリスト*1を考えます.HOPでいうところのリンクトリストは,それらしく書くと以下のものです. linked_list = node node | [ head, tail ] | [ head, undef] tail = node 言葉でいうと次のどちらかが成り立つ…