lisp java_从Java调用的LISP代码
長篇小說:
我正在為我的函數(shù)編程類做一個項目,我想到在Lisp中為
Mario AI competition
.
我正在研究從Java調(diào)用LISP代碼的框架/庫/方式,甚至更好的LISP Java互通信。
我看過
Jacol
但它是舊的,對我來說也不是很好。
到目前為止,我的最佳選擇是:
Jatha
.
它真的很整潔,雖然一些Lisp構(gòu)造還沒有實現(xiàn),但是可以很容易地定義自己的構(gòu)造。例如
地圖車
和
康德
未實現(xiàn)。
我已經(jīng)實現(xiàn)了我自己的
地圖車
命名
馬普
像這樣的Lisp:
(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)))
現(xiàn)在我有一個簡單的函數(shù),它使用這個函數(shù),例如,一個非線性列表中有多少個原子的函數(shù)
(defun myfunc (l)
(if (atom l)
'1
(apply '+ (mapp 'myfunc l))))
(myfunc '(6 2))
這一切在
CLSIP
現(xiàn)在從Java中調(diào)用LISP代碼
賈薩
. 所有人必須做的就是在Java項目中導入JATA庫,然后加載一個像這樣的LISP文件(EX):
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和其他實現(xiàn)中運行良好,但此代碼會產(chǎn)生stackoverflow
run:
APPLY: fn = +, args = ((1 1))
S: ((+ (QUOTE 1) (QUOTE 1)))
Exception in thread "main" java.lang.StackOverflowError
at java.lang.Long.toString(Long.java:242)
at java.lang.Long.toString(Long.java:100)
at java.lang.String.valueOf(String.java:2946)
at org.jatha.dynatype.StandardLispInteger.toString(StandardLispInteger.java:113)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:174)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:153)
at org.jatha.dynatype.StandardLispCons.toString(StandardLispCons.java:152)
at org.jatha.dynatype.StandardLispCons.toStringAsCdr_internal(StandardLispCons.java:17
所以我的問題是,為什么要這樣做?我的密碼錯了嗎?
這是賈莎的蟲子嗎?你自己看看,不需要很長時間就可以設(shè)置。
你做過類似的事情嗎?
你知道其他更好的方法嗎?我只想從Java調(diào)用一些LISP代碼,使其被執(zhí)行,并返回由LISP代碼計算的結(jié)果。
謝謝。
[編輯]修復了代碼,粘貼了錯誤的內(nèi)容。
總結(jié)
以上是生活随笔為你收集整理的lisp java_从Java调用的LISP代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据分析转软件测试,(转)性能测试用户模
- 下一篇: long转string mybatis_