cygwinでpTeX-liveをビルドしてみた

まず、
http://tutimura.ath.cx/ptexlive/
からptexlive-20100322.tar.gzをダウンロードして、適当なCTANのミラーサイト(例えば http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/systems/texlive/Images/ )からtexlive2009-20091107.iso.xzをダウンロードする。
そのあと、

$ xz -d texlive2009-20091107.iso.xz

としたあと、生成された.isoをp7zipなり7zを使うなりして展開する。

例えば、i:\Data\tex\texlive2009に展開されたとすると、そこで

$ ./install-tl

として全ファイルをインストールする。
そして、PATHの先頭にインストール先の、実行ファイルのあるディレクトリを指定する。

そうしたら、ptexliveをダウンロードしたディレクトリ下で

$ tar xf ptexlive-20100322.tar.gz
$ cd ptex-live-20100322
$ cp ptexlive.sample ptexlive.cfg

として、ptexlive.cfgを編集する。

自分の場合は以下のようにした(必要なところだけを抜粋)

### (必須・変更不可) ベースとなる TeX Live のバージョン
TEXLIVE_VERSION=2009

### (必須) mount した TeX Live 2009 DVD のディレクトリを指定
ISO_DIR=/cygdrive/i/Data/tex/texlive2009


### (任意) インストールした TeX Live 2009 のディレクトリを指定
TEXLIVE_DIR=/usr/local/texlive/2009

### (任意) インストールする ptexlive のディレクトリを指定
PREFIX=/usr/local/texlive/p2009

### (任意) configure 時にキャッシュを用いる(高速化されるが実験的)
conf_option -C

### (任意) make 中に最大 N 個のプロセスを起動する(高速化)
### N は (コア数+1) にするのがよいらしい
make_option -j 5 # for 4 core


### 余分にコンパイルするツールを指定する
### texdoc コマンドには luatex が必要
conf_option --enable-luatex

conf_option --enable-xetex
conf_option --enable-xdv2pdf
conf_option --enable-xdvipdfmx

conf_option --enable-dialog
conf_option --enable-pdfopen
conf_option --enable-ps2eps
conf_option --enable-psutils
conf_option --enable-t1utils
# conf_option --enable-tpic2pdftex
# conf_option --enable-vlna
# conf_option --enable-xindy

conf_option --enable-afm2pl
conf_option --enable-bibtex8
conf_option --enable-cjkutils
# conf_option --enable-detex
# conf_option --enable-devnag
# conf_option --enable-dtl
# conf_option --enable-dvi2tty
conf_option --enable-dvidvi
conf_option --enable-dviljk
conf_option --enable-dvipng
conf_option --enable-dvipos
conf_option --enable-lacheck
conf_option --enable-lcdf-typetools
# conf_option --enable-musixflx
# conf_option --enable-seetexk
conf_option --enable-tex4htk
conf_option --enable-ttf2pk
conf_option --enable-ttfdump

### kanji <=> unicode 変換に iconv を使う
conf_option --enable-kanji-iconv

### ptex/platex コマンドの入出力文字コードを指定(ディフォルトは UTF8)
KANJI_CODE=UTF8

そうしたら、

$ make all3 && make install

でインストール完了……のはずだが、SILのGraphiteライブラリのコンパイルでエラーを吐いたのでGraphiteだけ最新の開発版をGraphiteのレポジトリから上書きしてやり直した。
すると、正常にビルドとンストールが出来たので最終的に、

#!/bin/sh
PATH=/usr/local/texlive/2009/bin/i386-cygwin:$PATH
PATH=/usr/local/texlive/p2009/bin/i686-pc-cygwin/:$PATH
export PATH

といった感じの内容のファイルを/etc/profile.d/texlive.shにでも保存しておく。

これで終わり。

APLでFizzBuzzを書いてみた

APL(A Programming Language)っていう名前はあんまり聞きなれないかもしれないけど、

APL(エーピーエル)は、コンピュータのプログラミング言語の一種で、1957年のケネス・アイバーソンによる創案に基づいた独特の表記法を用いた、対話型インタープリター言語である。

http://ja.wikipedia.org/wiki/APL

モルガンスタンレーやソロモンブラザーズなどの投資銀行がAPLを駆使し、巨額の利益を得ていた(もしくは巨額の損失を生み出していた)というお話。

http://slashdot.jp/developers/article.pl?sid=09/06/08/0439231

とあるようにそれほどマイナーではないのかもしれない。

APLの処理系は商用のものが多いようだけど、NARS2000という名のオープンソースの処理系を使ってみた。
NARS2000 Welcome Page

インデックスオリジンが1に設定されている時(何もしなければ通常1)

(2⊥0=3 5∘.|L)⊃¨(⊂1↓,⍬'Fizz'∘.,⍬'Buzz'),¨L←⍳100

と書くと

 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23
       Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 
      43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 6
      2 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz
       82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz 

という結果が返ってくる。出力が途中で改行されてしまっているけど、本来は一行。

anarchy golf - FizzBuzzだと、数字(若しくは「FizzBuzz」など)一つ出力する毎に改行してるけど、APLではまだどうやるか調べが付いてない。
ちなみに上のプログラムは46文字。要素ごと改行するのに何字必要かはわからないけど、1文字1バイトのAPL用のエンコーディングなら10位以内には入りそう。
もしこのままでいいのならJより短くなることになる。Golfscriptより短く出来る気はしないけど……。

APLにはその後継としてJ言語というのがあって、J言語でFizzBuzzをしている人もいた。
2009-03-13 - niming538の日記

解説とかは後日。

追記[2013-07-24]
コード中に実体参照で書かれていたものを文字に直した。