KAWA

KAWAでデフォルトの出力形式をreadable-schemeにする方法

~/.kawarc.scmに以下を追加。 (if (eq? (static-field <kawa.Shell> 'defaultFormatName) #!null) (invoke-static <kawa.Shell> 'setDefaultFormat "readable-scheme"))ちなみに、shellが起動した後ではこの技は使えないので次のようにする。 (define (set-display-format format) (l</kawa.shell></kawa.shell>…

KAWAのappend-mapにバグ?

開発中のプログラムが不可解なところで暴走する原因を追っていたら、どうやらKAWAのバグらしいものを見つけてしまった。 再現する最小のコードは以下の通り。 (require 'list-lib) (define (foo x) (cond ((= x 0) '(a)) ((= x 1) '(b)) (else '()))) (appen…

Schemeのマクロ

define-syntaxで定義するSchemeのマクロ(Hygienic=健全な、参照上透過的)は最初理解できなかったけど、慣れるとなかなか楽しい。define-syntaxは式の変形パターンを指定すると勝手にパターンマッチングをやってくれる。ということでいくつか例を挙げてみる。…

SchemeからJavaの機能を呼び出す

The Kawa language frameworkを使うと、SchemeからJavaの機能を呼び出すことができる。 (事例1) Kawaで提供されていない機能をJavaの標準ライブラリを使って実装する Kawaはあまりライブラリが充実しているとは言えない。その代表的なものが正規表現によるマ…

Kawaを使ってJavaとSchemeを相互に呼び出す

概要 Kawaを使うとSchemeプログラムをコンパイルしてJavaから呼び出したり、逆にSchemeプログラムの中からJavaのクラスを使ったりできる。 Kawaのインストール kawa-1.8.jarをダウンロードしたら適当なところに置いてクラスパスを通すだけ。一応、RPMパッケ…