任何人都可以向我解释Autolisp/visual lisp背后的设计决策吗?

Sid*_*Bob 5 lisp programming-languages autolisp

我想知道有谁可以解释autolisp/visual lisp的以下功能背后的设计理由?对我而言,他们似乎面对公认的软件实践......我错过了什么?

  • 默认情况下,所有变量都是全局变量(即除非/在函数参数中放置)
  • 从autocad读取/写入数据需要将内容放入具有大量幻数的关联列表中. 10表示x/y坐标,90表示坐标列表的长度,63表示颜色等.好的,您可以将它们存储在某些常量中,但这意味着更多的全局变量,文档鼓励您直接使用幻数.
  • Lisp是一种函数式语言,它鼓励通过递归进行迭代编程,但尾部递归在视觉lisp中没有优化,导致可怕的调用堆栈 - 当然,除非你迭代.但循环语法非常严格; 例如,除非在终止条件中放置某种标志,否则不能从循环中中断或返回值.结果,丑陋的代码.
  • 一般来说,你被迫在面向函数式编程的地方声明变量 - 那么为什么要使用函数式(-ish)语言呢?

Ina*_*thi 6

Lisp不是一种语言,它是一组有时令人惊讶的不同语言.SchemeClojure是该家族的功能成员.Common Lisp,以及像Elisp这样的更专业的品种并不是特别有用,并且本身并不鼓励功能编程或递归.CL实际上包括一个非常灵活的对象系统,一个非常灵活的迭代DSL,并不保证优化的尾调用(Scheme方言,但一般不是Lisps;这是将"Lisp"视为单一语言的陷阱).

现在我们已经解决了这个问题,AutoLisp是1986年基于XLISP早期版本(最早于1983年发布)的实现.

面对当前接受的编程实践,它可能会飞出的原因是它早于目前公认的编程实践.要记住的另一件事是,今天最便宜的上网本比程序员在80年代中期可以获得的功能强大几百倍.这意味着即使给定的特征被认为是优秀的,CPU或内存约束也可能阻止其以商业语言实现.

我从来没有专门用Autolisp/Visual Lisp进行编程,你引用的东西听起来很讨厌,但它可能有一些性能/内存优势,这在当时是合理的.

  • 实际上,我认为发生的是Audotesk采取了一些早期的,不成熟的Xlisp来源(大概是自由许可的)。Xlisp继续进行改进,但是AutoLisp没有接受改进。我似乎还记得有一些有关AutoLisp的常见问题解答。 (2认同)