gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:41 25 4
gpt4 key购买 nike

我想知道任何人都可以解释 autolisp/visual lisp 的以下功能背后的设计原理吗?在我看来,它们似乎与公认的软件实践背道而驰……我是不是漏掉了什么?

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

最佳答案

Lisp 不是一种语言,它是一种 group of sometimes surprisingly different languages . SchemeClojure是家庭的功能成员。 Common Lisp 和像 Elisp 这样的更专业的品种并不是特别实用,并且本身并不鼓励函数式编程或递归。 CL 实际上包括一个 very flexible object system , 一个 extremely flexible iteration DSL ,并且不能保证优化的尾部调用(Scheme 方言可以,但一般的 Lisp 不会;这就是将“Lisp”视为单一语言的陷阱)。

现在我们已经弄清楚了,AutoLisp 是 1986 年基于 XLISP 早期版本(最早版本发布于 1983 )的实现。

它可能与当前公认的编程实践背道而驰的原因是它早于当前公认的编程实践。另一件要记住的事情是,今天最便宜的上网本是 several hundred times比程序员在 80 年代中期期望获得的功能更强大。这意味着即使给定的功能被认为是优秀的,CPU 或内存限制也可能阻止其在商业语言中的实现。

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

关于programming-languages - 任何人都可以向我解释 Autolisp/visual lisp 背后的设计决策吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9113591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com