2007-08-01から1ヶ月間の記事一覧

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