linux
Common Lisp 的宏(Macro)到底垃圾在哪?
一、Common Lisp 的宏(Macro)到底垃圾在哪?
Scribe 作者 Brain Reid 给出的 lexical macro 的原罪
Provide system designer with an excuse not to finish the design ("oh, that feature can be built with macros ...")
沒错,说的就是你, !
二、Common Lisp 的宏(Macro)到底神奇在哪?
理解这个问题我们先搞清一个常识。
- 编程语言的两个目标:代码的短小(简洁),程序的易读性
lisp宏的简短描述:可以编写lisp代码的函数。(lisp宏的本质是函数)
这个函数接收lisp代码,并对这些代码片段做操作,最终生成新的lisp代码。供后面程序调用执行。(也就是常提到的编写代码的代码 => 生成新的代码)
宏的行为如同函数对自身程序文本的变形。
-------------------------------程序进行自我编译时的代码重排,这是它的神奇之处-------------------------------
这已经可以解释宏的特别之处了,剩下的内容是解释上面的东西。
一般我们认为
程序 <==> 表达式+数据
而表达式一般是编程语言提供的基本语法,我们在具体业务上通过函数(或者其他的定义符)定义我们自己的逻辑来处理数据。其他语言的函数包括lisp的函数同样可以做到这点,但就像骑自行车从帝都到魔都,跟开传送在帝都与魔都间位移一样。两个方式都能在理论上达到目的,在事实的操作难易程度却存在很大差距。
在lisp中由于特殊的语法,表达式与数据的转换是如此浑然天成。
例:python在1.5版本后加入列表解析。
divisibleByTwo= [x for x in range(10) if x % 2 == 0]
这在1.5版本之前是不能使用的。但是我们通过其他方式可以达到目的。
divisibleByTwo = []
for x in range(10):
if x%2 == 0:
divisibleByTwo.append(x)
在lisp中可以这样做,我们定义一个叫做lcomp的宏。我们期望能达到这种效果
[x for x in range(10) if x % 2 == 0] ==> (lcomp x for x in (range 10) if (= (% x 2) 0))
代码如下:
(defmacro lcomp (expression for var in list conditional conditional-test)
;; create a unique variable name for the result
(let ((result (gensym)))
;; the arguments are really code so we can substitute them
;; store nil in the unique variable name generated above
`(let ((,result nil))
;; var is a variable name
;; list is the list literal we are suppose to iterate over
(loop for ,var in ,list
;; conditional is if or unless
;; conditioanl-test is (= (mod x 2) 0) in our examples
,conditional ,conditional-test
;; and this is the action from the earlier lisp example
;; result = result + [x] in python
do (setq ,result (append ,result (list ,expression))))
;; return the result
,result)))
在lisp解释器中就可以使用 (lcomp x for x in (range 10) if (= (mod x 2) 0))同样在lisp中也可以实现在python2.5中新加入的with语句。而不必等语言的实现者发布新版本后才可以使用。etc
为什么是宏而不是函数(有那些是宏能做而函数不能做的):
宏的参数在传递时不进行求值,而是以字面形式传递给宏的参数。宏的参数一旦传递完毕,就进行展开。展开宏的过程将一直进行到这段代码中的所有宏都展开完毕为止。宏完全展开完毕后,就和当初直接手写在此处的代码没有区别,也就是嵌入了这段代码上下文中,然后Lisp系统就对完整的代码上下文进行求值。
宏能控制宏调用中参数的求值,并且它可以展开进入到主调方的上下文中.
对于lisp来说,只要宏的名字能做到见文知意,宏的实现保证没有漏洞(或者能及时修复,这通常很容易实现)lisp代码就可以达到异常的短小,简洁。
-------------------------------------吐槽-----------------------------------
这也大大提高了门槛,因为修改代码需要你对程序的足够认识与扎实的功底。
对于其他语言,逻辑的不清尚且可以写出代码做测试,写了十几或几十行代码一步步弄懂逻辑,然后把前面的推倒。在lisp中几行代码就可以实现其他语言几何级的代码量,所以修改难度也是几何级的增长。
lisp写一些小脚本,别为难自己了,但是lisp对于大型项目,它可以做到你定义自己的语法,最终迭代成最适合你这个特定需求独特的语言。
对与lisp禅语:hi,lisp帮我把箱子打开吧,lisp: WTFK我需要拯救世界,lisp: 给我把魔杖对代码不保证编译通过。以上内容仅基于个人理解,请以专业内容为准。
What makes lisp macros so specialLisp Macrohttps://zh.wikipedia.org/zh-cn/Common_Lisphttps://zh.wikipedia.org/wiki/%E6%83%B0%E6%80%A7%E6%B1%82%E5%80%BC《on lisp》
三、CentOS下使用Common Lisp的详细指南
CentOS下使用Common Lisp的详细指南
Common Lisp是一种功能强大的编程语言,它的灵活性和可扩展性使得它成为许多开发者的首选。在CentOS操作系统上,安装和配置Common Lisp并不困难,本文将详细介绍如何在CentOS上使用Common Lisp。
1. 安装Common Lisp
在CentOS上安装Common Lisp非常简单。我们可以使用SBCL(Steel Bank Common Lisp)作为解释器。
请按照以下步骤进行安装:
- 打开终端并输入以下命令:
- 等待安装完成后,输入以下命令来验证安装是否成功:
sudo yum install sbcl
sbcl --version
2. 配置Common Lisp开发环境
安装完成后,我们需要配置Common Lisp的开发环境。
请按照以下步骤进行配置:
- 创建一个新的文件夹用于存储Common Lisp源代码:
- 在文件夹内创建一个新的文件,命名为
hello.lisp
: - 使用文本编辑器打开
hello.lisp
并添加以下代码: - 保存并关闭文件。
mkdir ~/lisp
touch ~/lisp/hello.lisp
(format t "Hello, World!")
3. 运行Common Lisp程序
现在我们可以尝试运行一个简单的Common Lisp程序。
- 打开终端并输入以下命令来启动Common Lisp解释器:
- 输入以下命令来加载并运行
hello.lisp
文件:
sbcl
(load "~/lisp/hello.lisp")
如果一切顺利,你将在终端中看到输出Hello, World!
。
4. 开始使用Common Lisp
现在,你已经成功在CentOS上安装和配置了Common Lisp,并运行了一个简单的程序。你可以开始编写和运行更复杂的Common Lisp代码,并利用Common Lisp强大的功能来解决你的编程问题。
希望本指南能够帮助你更好地在CentOS上使用Common Lisp。
感谢你阅读本文,希望本文对你在CentOS下使用Common Lisp有所帮助!
四、深入探讨Common Lisp在机器学习领域的应用
Common Lisp简介
Common Lisp 是一种功能强大的编程语言,广泛用于人工智能和机器学习领域。它具有丰富的工具和库,为开发者提供了很大的灵活性和控制力。
机器学习概述
机器学习是人工智能的一个重要分支,它利用统计学和数据分析来让计算机系统自动提高性能。在当今数字化时代,机器学习已经成为诸如预测分析、自然语言处理、图像识别等应用的核心技术。
Common Lisp在机器学习中的应用
Common Lisp 在机器学习中的应用主要体现在以下几个方面:
- 灵活性:作为一种高度灵活的语言,Common Lisp 允许开发者以自己喜欢的方式定制算法,满足特定需求。
- 性能:由于其编译到本地代码的能力,Common Lisp 具有出色的性能,适合处理大规模的数据集和复杂的模型。
- 库和工具:Common Lisp 生态系统中有丰富的机器学习相关工具和库,如LML, CLML等,提供了丰富的功能和算法。
- 学习曲线:尽管Common Lisp 的学习曲线较陡,但一旦掌握,可以让开发者更好地理解算法背后的原理,并实现高效的机器学习模型。
结语
在当今机器学习热潮下,Common Lisp 作为一种强大的编程语言,为开发者提供了在机器学习领域探索和创新的机会。深入探讨Common Lisp 在机器学习中的应用,有助于理解其独特之处,并为开发者在实践中提供更多可能性。
感谢读者看完这篇文章,希望通过这篇文章能够为您对Common Lisp 在机器学习中的应用有更深入的了解。
五、a common和it common的区别?
在英语中,"a common"和"it common"都可以表示"常见的"或"普遍的",但它们之间有一些区别:
1. "a common":这个表达可以用来描述一个特定的事物或现象,即某一类事物或现象的共同特征。例如:
- The blue sky is a common sight in summer.(夏天的蓝天是一种常见的景象。)
- I find that many Chinese people speak Mandarin commonly.(我发现很多中国人通常说普通话。)
2. "it common":这个表达通常用于指代一个客观事实或普遍现象,即普遍存在的现象。例如:
- It's common knowledge that water vapor rises to the atmosphere when it is heated.(水蒸发成水蒸气,这是一个普遍的知识。)
- In many countries, students are required to attend school until they reach the age of 18.(在许多国家,学生需要在18岁之前上学,这是一个普遍的规定。)
总结起来,"a common"通常用于描述某一特定事物或现象的共同特征,而"it common"通常用于指代一个普遍存在的事实或现象。这两个表达在使用时需要根据语境和含义进行选择。
六、lisp特点?
LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。LISP作为因应人工智能而设计的语言,是第一个声明式系内函数式程序设计语言,有别于命令式系内过程式的C、Fortran和面向对象的Java、C#等结构化程序设计语言。
七、centos lisp
在计算机科学领域,CentOS 是一种广泛使用的 Linux 发行版,它基于 Red Hat Enterprise Linux 构建而成。CentOS 作为一种免费的开源操作系统,在服务器领域得到了广泛的应用。它提供了稳定、可靠且安全的操作环境,适用于各种类型的应用程序和服务。
CentOS 的特点和优势
作为一种企业级 Linux 发行版,CentOS 具有诸多优点和特性,使其成为许多组织和个人的首选。以下是一些 CentOS 的特点:
- 稳定性: CentOS 以其稳定可靠的性能而闻名,适用于生产环境中关键性的应用。
- 安全性: CentOS 团队及时发布安全更新和修补程序,保障系统免受漏洞和攻击。
- 免费开源: CentOS 提供免费的软件许可证,用户无需支付费用即可获得高质量的操作系统。
- 社区支持: CentOS 拥有庞大的用户社区,用户可以获取免费的技术支持和文档资源。
Lisp 语言的特点
Lisp 是一种古老且具有独特设计理念的编程语言,被广泛用于人工智能和符号处理领域。以下是 Lisp 语言的一些特点:
- 函数式编程: Lisp 是一种函数式编程语言,强调函数的重用和组合,有利于编写清晰、简洁的代码。
- 元编程能力: Lisp 支持元编程,允许程序在运行时修改自身的结构和行为,使得编程更加灵活。
- 强大的列表处理: Lisp 的核心数据结构是列表,它提供了丰富的列表处理函数和操作符,方便对数据进行操作和转换。
- 代码即数据: 在 Lisp 中,代码和数据具有相同的表示形式,这种代码即数据的特性赋予 Lisp 极大的灵活性。
CentOS 和 Lisp 的结合应用
虽然 CentOS 和 Lisp 是两种看似不相关的技术,但它们在实际应用中可以有许多有趣的结合点。
首先,CentOS 作为一种稳定可靠的操作系统,为 Lisp 程序的运行提供了可靠的基础环境。开发人员可以在 CentOS 的环境中部署 Lisp 解释器或开发环境,进行 Lisp 相关的开发和运行。
其次,CentOS 的开源特性与 Lisp 的元编程能力相辅相成。开发人员可以在 CentOS 上自由地定制和扩展系统功能,同时利用 Lisp 的元编程能力实现更高级的自动化和定制化功能。
最后,CentOS 的安全性保障了 Lisp 程序的运行安全。作为广泛使用的 Linux 发行版,CentOS 在安全性方面拥有丰富的经验和成熟的防护机制,可以有效地保护 Lisp 程序免受恶意攻击。
结语
综上所述,CentOS 和 Lisp 分别代表着稳定性与灵活性,安全性与创新性。它们在不同的领域有着各自独特的优势,但通过合理的结合和应用,可以为开发者带来更为丰富和多样化的技术选择和发展空间。
在未来的发展中,CentOS 和 Lisp 或许会有更多的交集和融合,开创出更多令人惊喜的新应用场景和发展方向。
八、common动词?
该词没有动词形式,common,意思是普通的,例如:
1.Breast cancer is the most common form of cancer among women in this country.乳腺癌是这个国家妇女中最常见的一种癌症。
2.The most common complaint is about poor service.最常见的投诉与服务差有关。
3.When did this word come into common use?这个词是什么时候普遍使用起来的?
九、common变形?
复数
commons
比较级
commoner
最高级
commonest
common
adj. 一般的;常见的;通常的;日常的;普遍的
commonplace
adj. 平常的;平凡的;普通的
commonness
n. 平凡;普通
commonly
adv. 经常地;频繁地
commonalty
n. 共同团体
commons
pl-n.食堂;餐厅
uncommon
adj. 不平常的
十、common缩写?
common常见的缩写有:cmn(用于电子邮件和短信)、cm(用于尺寸单位厘米)、com(用于互联网域名)、co(用于公司名称)、C(用于摄氏温度)、Cm(用于厘米)、Cmn(用于公分)、C/A(用于现金到货付款方式)、CFO(用于首席财务官)、CEO(用于首席执行官)等。这些缩写在不同领域和语境中使用,为了简化表达和交流。通过使用缩写,可以节省时间和空间,并提高信息传递的效率。然而,使用缩写时需要注意上下文和语境,以确保准确理解和避免误解。
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...