有没有适用于 .Net 的 Common Lisp 实现?

48

是否有适用于 .Net 的 Common Lisp 实现?

9个回答

29

我最近没有仔细研究过它,但至少过去存在一些在CLR上完全实现Common Lisp的问题,如果这个问题得到解决,我会有点惊讶。问题出现在处理浮点数等方面,.Net/CLR有一种方法可以做到 a)微妙地不正确 b)与Common Lisp的ANSI标准不一致,但c)不允许任何绕开此问题的方式。还有其他类似的问题。这些东西很琐碎,也许并不太重要,但意味着你不太可能在CLR上看到一个ANSI CL。

更大的问题是,例如,Common Lisp具有更强大的对象系统,因此您无法将其1:1映射到运行时中的对象(例如没有MI)。这是可以接受的,但会给您留下一种内外分离的方法,而这正是普通运行时试图避免的...

无论是否会看到在其上运行的Common Lisp-ish变体都是另一回事,但目前我不知道有任何情况(并不是因为我已经认真寻找了)


1
您可以使用MOP来采用任何您想要的对象模型。但是如何处理数字边缘情况问题还不太确定。 - jfm3
2
@jfm3:是的,你可以做很多事情,但它不会消除CLOS和运行时对象系统之间的阻抗不匹配。作为一个更通用的系统,CLOS仍然需要将东西作为对象从运行时调度出来。你可以使用MOP使其可用,但并不完全本地化。 - simon
2
Lisp的对象系统比.Net更强大,为什么? - Hamish Grubijan
9
Hamish,CLOS支持多重派发和多重继承。除此之外,它还支持before/after方法,并且可以在运行时动态地更新类和实例。因此,调用决策非常复杂,在.NET(或Java、C++等)中无法简单地复制它。 - simon
1
由于其性能问题,许多LISP程序员决定不使用CLOS,而只是在“普通的lisp”中进行编程(结构和函数等)。因此,我认为拥有一个没有争议的CLOS子集的CL会很好。 - BitTickler

17

如果可以反过来使用,您可以通过Edi Weitz的RDNZL从您喜爱的Lisp访问.Net。


2
它现在通过Bike得到了重生。 - Ehvince

17
不,但你可能想考虑在DLR上运行的IronScheme
从网站上来看:
IronScheme将旨在基于Microsoft DLR成为符合R6RS标准的Scheme实现。
IronScheme将是IronLisp的完全重写,吸取开发IronLisp时所学到的教训。

2
IronScheme的作者是这里的用户:http://stackoverflow.com/users/15541/leppie - Kyle Cronin

15

如果你现在重新思考一下2008年的这个问题,你可能会考虑使用CLR上的Clojure。虽然它不是Common Lisp,但如果你是从那个方向来的,学习起来还是相当容易的。与CLR进行互操作非常简单,每天都有更多的用户加入,并解决了一些其他重要的主题,比如并发性。可能值得花费一些时间在这上面。更多关于CLR特定的Clojure信息 这里


7

1
自2009年1月以来就没有更新过,可能已经死了。 - johnc
2
这不是通用Lisp。是另一种方言。 - jorgeu

6

看起来像是Java。 - citykid
1
有点儿..我决定让Java代码保持原样,由Java维护..但是它使用IKVM来生成.NET程序集。 - logicmoo

2

#Script Lisp

我正在开发 #Script Lisp,这是一个增强版的 Nukata Lisp,具有许多新功能,可以重用 #Script 现有的脚本功能,以提供与 #Script 的其余部分(请参见语言块和表达式)以及 .NET 的无缝集成,包括 .NET 类型的脚本化,支持所有 .NET 数字类型,并访问其全面的库,其中包括超过1000+脚本方法 - 这些方法是为从动态语言访问 .NET 功能而优化设计的。

为了提高与现有的 Common Lisp 源代码的兼容性,它还实现了大多数 简化版 Common Lisp 参考手册,以及实现 C# LINQ 101 示例所需的所有缺失函数:

#Script Lisp LINQ 示例

为了提高可读性和熟悉度,它还采用了许多Clojure语法来定义数据列表和映射文字, 匿名函数, Java互操作的语法用于.NET互操作, 关键字语法用于索引集合和访问索引访问器,并使用Clojure的流行缩写形式fndefdefn,提高了与Clojure的源代码兼容性。

YouTube演示视频

由于它是一种一流的#Script语言,因此它受益于其广泛支持的用例生态系统,以下是您可以在YouTube视频中预览的其中几个:

安装

#Script Lisp 可以通过x跨平台的 dotnet 工具即时安装,命令为:

$ dotnet tool install -g x

你可以使用以下命令快速启动Lisp REPL:

$ x lisp

并能够 运行并观看 Lisp 脚本,您可以实时查看更改。

相同的功能也可在 Windows 应用程序 dotnet 工具 中使用:

$ dotnet tool install -g app

此外,它还可以让您使用#Script Lisp来开发Gist桌面应用程序Sharp应用程序(.NET Core Windows桌面应用程序)。


1
这太酷了。 - Ben Collins

2

0
你可以尝试使用this(免责声明,我自己没有测试过)。同时阅读this。这就是链接来源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接