質問

長編:

関数型プログラミングクラスのプロジェクトを行っています。マリオAIコンテスト

私は、JavaからLispコードを呼び出すフレームワーク/ライブラリ/方法、またはさらに優れたLisp-Java相互通信を探していました。

Jacol を確認しましたが、古いものであり、コンパイルはうまくいきません。

これまでの最善の選択は、 Jatha です。 いくつかのLispコンストラクトはまだ実装されていませんが、自分のコンストラクトを簡単に定義できます。たとえば、 mapcar cond は実装されていません。 次のように、Lispで mapp という名前の独自の mapcar を実装しました。

(defun map* (f l r) 
  (if (null l)
      r
      (map* f (rest l) (cons (funcall f (first l)) r))))

(defun mapp (f l)
    (reverse (map* f l nil)))

今、これを使用する単純な関数、たとえば、非線形リストにある原子の数を数える関数があります

(defun myfunc (l)
  (if (atom l)
      '1
      (apply '+ (mapp 'myfunc l)))) 

(myfunc '(6 2))

これはすべて clisp で正常に動作します JavaからLispコードを呼び出すために、 Jatha を使用しました。行う必要があるのは、JavaプロジェクトにJathaライブラリをインポートし、次のようなlispファイルをロードすることだけです(例):

import org.jatha.*;
import org.jatha.dynatype.*;

public class Main {

    public static void main(String[] args) {
        Jatha lisp = new Jatha(false, false);
        lisp.init();
        lisp.start();
        LispValue file = lisp.makeString("X:\\lispproject\\test1.lisp");
        LispValue rez1 = lisp.load(file);
    }
}

このコードはclispおよびその他の実装では正常に機能しますが、このコードはStackOverflowを生成します

実行: 適用:fn = +、args =((1 1)) S:((+(QUOTE 1)(QUOTE 1)))) スレッド" main"の例外java.lang.StackOverflowError         java.lang.Long.toString(Long.java:242)         java.lang.Long.toString(Long.java:100)         java.lang.String.valueOf(String.java:2946)         org.jatha.dynatype.StandardLispInteger.toString(StandardLispInteger.java:113)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)         org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)で         org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)で         org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)         org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)         org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)         org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)         org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)         org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)で         org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)         で

役に立ちましたか?

解決

ABCL は、JVMで直接実行されるCommon Lisp実装です。 Common LispをJavaと並行して実行するための最良のオプション。

他のヒント

Clojure を確認しましたか?これは、Java仮想マシンで実行されるLisp方言です。

FOIL (Lispの外部オブジェクトインターフェイス)は、Javaおよび.NETプログラムと対話する手段を提供します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top