kiyoka.2010_08_25 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2010_08
55555555555555555555555555555555555555555
5

[Nendo] Nendoで定義した関数をRubyから呼べるようになった

5

私がRubyで書いているLisp方言、 Nendoについて。

5

 

5

タイトルの通り、Nendoで定義した関数をRubyから呼べるようになった。

5

これで、Nendoで書いたコードをRubyのライブラリとして呼べるようになる。

5

 

5

以下はサンプルプログラム [ export-lisp-functions.rb ]

5
#!/usr/local/bin/ruby
5
5
require 'nendo'
5
5
def main
5
  core = Nendo::Core.new()
5
  core.loadInitFile
5
  lst = [ "a", "b", "c",
5
          [ "d", "e" ].to_list
5
        ].to_list
5
  core.evalStr( '(define (sexpToString sexp) (write-to-string sexp))' )
5
  core.evalStr( '(export-to-ruby sexpToString)' )
5
  core.evalStr( '(use text.tree)' )
5
  core.evalStr( '(define (treeToString sexp) (tree->string sexp))' )
5
  core.evalStr( '(export-to-ruby treeToString)' )
5
  puts core.sexpToString( lst )
5
  puts core.treeToString( lst )
5
end
5
5
main
5

 

5

Nendoの世界で (export-to-ruby シンボル) と宣言すると、Nendo::Coreクラスのインスタンス(サンプルでは core) に同名のメソッドが動的に増えるのだ。

5

動的にメソッドが生えるというのはなんか気持ち悪いけれど、Rubyの世界では普通なのです。ほんとほんと。

5

※ 現状は、引数の数が固定の関数しか export できないルールにしている。まあ困らんだろう。

5

 

5
 [実行結果]
5
$ ./export-lisp-functions.rb 
5
("a" "b" "c" ("d" "e"))
5
abcde
5

 

5

これで、Nendoで書いたアプリを、RackやSinatra(Webアプリケーションフレームワーク)に乗せることができるようになったはず。

5

早速、Sekkaという新しい日本語変換エンジンをのせていくところから始める予定。

5

 

5

...comment disabled...