java与lisp_我想用Java实现Lisp实现.我最多需要在Java中...

您无需在Java中实现太多.

甚至S表达式解析也可以在Lisp中实现,而Java部分仅负责读取一些简单的序列化形式.例如,在像(a(b c))的Forth语法中, a b c NIL. .零. .,哪里.使一个坏细胞.

Java运行时应提供最少的原语集.无需支持完整的Lisp语义,在Lisp本身中将编译器从“完整的” Lisp实施为简化的引导语言会更容易.引导程序语言可能支持以下原语:

> FUNCTION,制作具有给定数量的参数和给定主体的函数对象

> ARG,访问函数的第n个参数

> VAR,访问闭合的第n个插槽

> IF原语

>应用原始

> CONST原语

> CLOSURE原语-与功能对象相似,但初始化了许多关闭环境插槽

用Java实现这种解释器很容易,上面的所有原语都是使用方法Run(Environment env)实现相同AstNode接口的类.

在Lisp方面,必须实现一个简单的“编译器”,它将执行lambda提升和变量枚举. let,let *等之类的东西可以实现为简单的宏(使用Lisp本身也可以实现宏扩展器).

Java提供的最少的运行时库函数集应包含car,cdr,cons,listp,nullp,符??号到字符串和字符串到符号的转换,字符串串联以及对Java反射的访问,以实现Lisp方面的所有其他功能.

当然,这种解释器的效率不是很高-例如,您必须通过Y-combinator实现递归函数.但是,您只需要使用它来引导语言的下一个迭代,当然也可以在Lisp中实现,它将相同的源语言编译为Java字节码.

变化是可能的-例如,可以实现一个简单的graph reduction引擎而不是上面的解释器,它甚至更简单,但效率更低.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值