Open source 寻找小型语言(即DSL)的(c)lisp示例

Open source 寻找小型语言(即DSL)的(c)lisp示例,open-source,lisp,common-lisp,Open Source,Lisp,Common Lisp,阅读写得好的代码似乎有助于我学习一门语言。(至少与C)合作。[删除问题中“过度指定”部分] 我特别感兴趣的是lisp作为一种适合创建针对某个问题的迷你语言或DSL的语言的声誉。当然,这个程序应该是开源的,最好是通过网络提供 我在谷歌上搜索到了以下示例: 有人有别的吗?(是的,我将继续阅读“实用公共Lisp”。) 11小时后(只有11小时!):谢谢大家。多棒的网站,多好的答案和提示 如果您还没有看过,这本书可以在网上免费获得,并且有几个示例项目。我觉得您的限制过多了: 小到足以理解,变化多样 足

阅读写得好的代码似乎有助于我学习一门语言。(至少与C)合作。[删除问题中“过度指定”部分]

我特别感兴趣的是lisp作为一种适合创建针对某个问题的迷你语言或DSL的语言的声誉。当然,这个程序应该是开源的,最好是通过网络提供

我在谷歌上搜索到了以下示例:

有人有别的吗?(是的,我将继续阅读“实用公共Lisp”。)


11小时后(只有11小时!):谢谢大家。多棒的网站,多好的答案和提示

如果您还没有看过,这本书可以在网上免费获得,并且有几个示例项目。

我觉得您的限制过多了:

小到足以理解,变化多样 足以展示大部分(c)lisp的 技巧和特点,而不是 不透明(文件的“书写良好”部分) (愿望),并独立于其他 包裹

CommonLisp是一种庞大的语言,当您组合语言元素时出现的能力集要大得多。你不能让一个小程序在CL中显示“大多数技巧”

当你从另一种语言学习CL时,你也会发现许多概念是陌生的。因此,CL更多的是其基本范式,而不是技巧


我的建议是先读一读,然后开始构建自己的程序或研究开源代码

例如,Edi Weitz通常编写良好的代码。查看他的项目


现在去读PCL.:)

循环宏几乎是嵌入Common Lisp的DSL的完美例子。但是,因为它已经是标准的一部分,所以它可能不是您想要的。

CLs格式功能有一个迷你dsl

我认为用于打印字符串的dsl将编译为机器代码

(格式为nil“~{~A~#[~:;,~]~}”lst))


我有点懒得找到链接,但你应该能够“谷歌”/“必应”它。下面的列表提到了非常不同的嵌入语言的方法和非常不同的嵌入语言

  • 迭代
  • “defsystem”中的系统/模块/文件描述,例如ASDF
  • 中缀读宏
  • 在CLIM中定义用于指定用户界面的应用程序框架
  • 在LispWorks和CLSQL中嵌入Lispified SQL查询
  • LispWorks的知识工程:逻辑语言与规则,查询
  • Allegro CL中嵌入的Prolog
  • 以各种形式嵌入HTML
  • XMLisp,集成了XML和Lisp
  • 非确定性程序设计的尖叫器
  • PWGL,用于作曲的可视化编程

请注意,有简单的嵌入式语言,也有非常复杂的语言,它们提供了全新的范例,如Prolog、Screamer、CORBA等等。CLSQL为SQL查询提供了一种Lispy表示法,可将其编译为SQL,几乎所有的LispHTML和XML生成库都符合要求。是用于词汇绑定变量的DSL。您可能不知道您需要一个,但它非常有用。

系列是一种DSL,这取决于您的定义。它在CLTL2的附录中,虽然它实际上不是语言的一部分。

其次,这是一本很棒的Lisp书。是的,我本周下载了这本书,但还没有深入研究。我突然想到,可能有人从另一个角度了解一两个程序:“工作代码”和“说教代码”的区别。PCL中的代码具有实用价值。我学习新编辑器的时间有点长了,我已经用gvim代替emacs很多年了。此外,cygwin领导下的clisp感到熟悉和方便。原来这本书想让我从emacs IDE运行Allegro,但它有(谢谢,WinXP)安装/更新问题。这张图片有点不对劲…我整天都在使用Vim和控制台(SBCL w/rlwrap和SB-ACLREPL)。为了避免混淆:Lisp是一个编程语言家族。Common Lisp(或简称:CL)是Lisp的一种方言。CLISP是公共Lisp的一个特殊实现(其他的是CCL、GCL、SBCL、LispWorks、ACL等等)。“或者研究开源代码。”啊。好了,给你。除了教科书和Weitz网站(非常感谢,顺便说一句),还有什么建议吗?记得我在找一个小型语言类型的应用程序的例子,但它独立于软件包。cl-cairo2有一些宏示例,它们形成了微小的DSL(grep表示defmacro)。票价匹配器有一个DSL用于定义特定匹配器(define-*-matcher)。迭代库(和循环实现)都是编写灵活循环的复杂DSL的示例。usocket有另一个小型DSL,它抽象出套接字设置/拆卸的细节(例如,使用-CLIENT-socket)。通过一个体面的clbuild结帐将显示更多。谢谢。对于我来说,如何找到“迭代库”的代码是显而易见的吗?这听起来像是“用语言扩展语言”的一个很好的例子,我最近想知道我是否应该对Python唯一的基本“while”构造感到满意。这就是您提到的“迭代库”代码吗?好吃。