问题标签 [jatha]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
29018 浏览

java - 建立一个德州扑克玩 AI..从头开始

我对用 Java 构建 Texas Hold 'Em AI 引擎很感兴趣。这是一个长期项目,我计划至少投资两年。我还在上大学,还没有建立任何雄心勃勃的东西,并且想要解决一个长期保持我兴趣的问题。我是人工智能领域的新手。从我在大学的数据结构课上,我知道了 BFS 和 DFS、回溯、DP、树、图等基本构建块。我正在学习正则表达式,为 SCJP 和 SCJD 学习,我很快就会学习(密集) 统计课程。

问题:

-我从哪里开始?我应该选择什么书?扑克游戏程序运行在什么样的人工智能上?我可以从哪个开源项目中获取页面?Java中有什么好的AI资源吗?我也有兴趣学习 Lisp,Jatha 好吗?

0 投票
3 回答
4666 浏览

java - 从 Java 调用的 Lisp 代码

很长的故事:

我正在为我的函数式编程课程做一个项目,我想在 Lisp 中为Mario AI 比赛编写一个 AI 控制器。

我正在研究从 Java 调用 Lisp 代码的框架/库/方法,甚至是更好的 Lisp-Java 互通。

我看过Jacol,但它很旧,对我来说编译不好。

到目前为止,我最好的选择是:Jatha。真的很简洁,虽然一些 lisp 结构还没有实现,但可以很容易地定义自己的结构。例如mapcarcond没有实现。我已经实现了自己的mapcar,在 Lisp 中命名为mapp,如下所示:

现在我有一个使用它的简单函数,例如,一个计算非线性列表中有多少原子的函数

这一切都在clisp中运行良好 现在从我使用Jatha 的 Java 调用 Lisp 代码。所要做的就是在 java 项目中导入 Jatha 库并加载一个像这样的 lisp 文件(例如):

虽然该代码在 clisp 和其他实现中运行良好,但该代码会产生 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

所以我的问题是,它为什么要这样做?我的代码错了吗?
它是 Jatha 中的错误吗?自己看吧,设置时间不长。
你做过类似的事情吗?
你知道其他更好的方法吗?我想要的只是从 Java 中调用一些 Lisp 代码,让它执行,然后取回由 Lisp 代码计算的结果。
谢谢。

[编辑] 修正代码,粘贴错误。