Path: sran124!katsu From: katsu@sra.co.jp (WATANABE Katsuhiro) Message-ID: Date: 15 Jun 90 15:42:44 Organization: Software Research Associates, Inc.,Japan In-reply-to: katsu@sra.co.jp's message of 14 Jun 90 04:17:35 GMT Newsgroups: sra.test Subject: Re: Today's Junk article. [Unimaga 1990Jun little language] Distribution: sra References: 「本日のゴミ記事」 この投稿の趣旨: 特になし。やりたいからやってるだけ。日記のつもり。 「TeX への挑戦状」 記事 で katsu@sra.co.jp (WATANABE Katsuhiro) いはく > コンマ付きの数に対して計算をやる uexpr を書くのには、bc でなくとも > 式を評価する機構がある command/filter であったら何を使ってもよかった > はずです。こういったものの一つとして m4 がありますね。 roff にも簡単な式を評価する機構がありますが、評価機構が貧弱で、 演算子に優先順序がなかったり、空白が入ってはいけないという制限が あります。 でも、数字にカンマをつけることぐらいはできそうなので、ちょっと nroff でやってみました。 ---------------- comma.nroff .¥" .pl 1v .af IT 001 .de CM .nr N1 (¥¥$1/1000) .ie ¥¥n(N1=0 ¥¥$1¥c .el ¥{¥ . CM ¥¥n(N1 . nr NU ¥¥n(N1 . nr IT (¥¥$1%1000) ,¥¥n(IT¥c .¥} .. .di NS .rd .fl .di .nr NU ¥*(NS .if (¥n(NU<0) ¥{¥ . nr NU (¥n(NU*(-1)) -¥c .¥} .CM ¥n(NU ---------------- echo "123*456+789" | nroff comma.nroff なんてことをやってみてください。 # echo "123+456*789" | nroff comma.nroff # とか、 # echo "123 + 456" | nroff comma.nroff # とやっていじめないでください。あくまでもコンマをつけるだけの # マクロ定義で、式の評価は副作用ですから。 [工夫したところ] 標準入力をレジスタに読み込むために、マクロ NS に divert しておいて から .rd するという技を使った。亀山さんに教わった技。 [特別注意を要した点] 1.diversion の中の出力は、.fl, .br などで掃き出される必要がある。 これも亀山さんに教わった。 2.roff は行の区切りは当然単語の区切りと思ってしまうので、 1 2 3 のような入力では出力が「1 2 3」のように間に空白が空いてしまう。これを 避けて「123」のような出力を得るためには、 1¥c 2¥c 3 のように書かねばならない。(6行目、11行目、終りから3行目) これまたわからなくて亀山さんに教わったが、マニュアルをちゃんと 読んだらしっかり書いてあった。 [わざわざ nroff を使うことによる利益] .af を使って数字の出力の書式を設定できるので、表示部分が楽。 実際これのおかげでなかなか短くまとまった。 (毎回「なし。」じゃあちょっとね......) ¥TeX では comma.tex みたいなもの書けませんよね? 「{¥gt やーい、¥TeX。}」 -- ----____----____ 渡邊克宏 環境開発部 今月の歌: 「♪ 僕等の名前を覚えて欲しい 大型機を知らない子供達さ ♪」