IronScheme
今年最初の投稿は、新年早々IronSchemeです。(^^;
前回、Clojureをまわりを調べているときに、この存在を知り試してみようと思いました。
.NETフレームワークのライブラリが使用できるSchemeということですが、IronPython, IronRubyと同じように位置づけなのでしょう。
Lisp (+ List Processor))
http://decode.red/blog/20141201244/
ここで使用した順列のプログラムをIronSchemeで動かしてみました。
環境 : Windows 8.1
https://ironscheme.codeplex.com/
IronScheme-109887.zip
perm.ss
(import (srfi :1 lists)) (define (perm ls a) (if (null? ls) (display (reverse a)) (for-each (lambda (n) (perm (remove (lambda (a) (equal? a n)) ls)(cons n a))) ls))) (perm '(1 2 3) '()) (newline)
冒頭のimportの記述や、コマンド実行時ファイル指定の方法にちょっと迷いました。
hello.ss
(import (rnrs)) (display "Hello") (newline)
上の二つのプログラムをそれぞれ以下のように実行しました。
最初、srfiの指定方法がいけないのかどちらかわかりませんでしたが、リダイレクトの方法だとうまくいくので、とりあえずこのままにしました。
次に、下記サイトを参考に、VisualStduio 2013を使ってC#から呼び出してみました。
http://cryks.hateblo.jp/entry/20120417/1334660328
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using IronScheme; using IronScheme.Runtime; namespace csConsScheme01 { class Program { static void Main(string[] args) { Console.WriteLine("(+ 1 2 3)".Eval()); Console.ReadKey(); "(define (add x y)(+ x y))".Eval(); var add = "add".Eval<Callable>(); Console.WriteLine(add.Call(1, 2)); } } }
出力は、6と3です。
特定の処理だけ組み込み言語的に使う用途にいいかもしれません。