#:g1: roman.pltの紹介

Posted 2014-04-10 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の101日目です。

roman.pltとはなにか

 roman.plt整数とローマ数字の文字列表現を相互変換するRacketのライブラリです。

パッケージ情報

パッケージ名roman.plt
PLaneTPLaneT Package Repository : PLaneT > ams > roman.plt

インストール方法

 Racket内から

(require (planet ams/roman:1:1/roman))

でOKです。

試してみる

 どんな関数があるかは、上記のPLaneTのドキュメントで確認できます。
説明なしでも使い方は分かるかと思いますが、int->romanと、roman->intが主な関数です。

(int->roman 1121)
;=> "MCXXI"

(roman->int "MCXXI") ;=> 1121

(int->roman 3999) ;=> "MMMCMXCIX"

(int->roman 4000) ;!> int->roman: contract violation ;!> expected: (integer-in 1 3999)

3999より大きい数には対応していません。

 おまけ的に足し算、かけ算、割り算、余りの関数がラテン語名の関数で提供されています。

(apply summa (map int->roman (iota 10 1)))
;=> "LV"

(differentia "C" "LX") ;=> "XL"

(productum "I" "II" "III" "IV") ;=> "XXIV"

(quotiens "X" "III") ;=> "III"

(residuum "X" "III") ;=> "I"

まとめ

 今回は、roman.pltを紹介してみました。
MacLISPでは基数をローマ数字に設定できたり、MacLISP系LISPのFORMATでもローマ数字を出力できたり、何かと馴染み深いローマ数字ですが、MacLISP時代の実装から代々大抵は3999までのサポートです。
4000以上の表現には何か問題でもあるのでしょうか。

comments powered by Disqus