保持CL和Scheme直立
根据我的心情,我似乎在想要Lisp-1和Lisp-2之间来回走动。不幸的是,除了明显的名称空间差异之外,这还会导致我们遇到各种有趣的函数名称/等问题。举个例子,今晚我试图写一些代码(map#'function listvar),这当然在CL中根本不起作用。让我有点想起我想要mapcar,而不是map。当然,当史莱姆/ emacs将地图IS定义为某种东西时,这显然无济于事,尽管显然根本不具有相同的功能。
那么,关于如何尽量减少选择一个并坚持下去的指示呢?
解决方案
回答
Map比mapcar更通用,例如,我们可以执行以下操作而不是使用mapcar:
(map 'list #'function listvar)
如何使方案和CL分开?我想,当我们对两种语言都足够了解时,我们只会知道一种语言有效而另一种语言无效。尽管在语法上有相似之处,但它们在风格上却是完全不同的语言。
回答
我当然知道有语法上的差异,尽管我当然还不够流利,无法自动使用它们,从而使代码看起来当前更相似;-)。
我觉得答案会是这样,但总能希望有一个捷径<_ <。
回答
使两种语言保持一致的最简单方法是在Common Lisp中进行思考和编写代码。常见的Lisp代码可以相对容易地转换为Scheme代码;但是,从Scheme转到Common Lisp可能会引起一些麻烦。我记得曾经在哪里使用Scheme中的letrec来存储变量和函数,并且不得不将其拆分为分别用于变量和函数名称空间的单独的CL函数。
实际上,尽管我没有养成编写CL代码的习惯,但这使我所经历的时代更加痛苦。
回答
好吧,我认为一旦我们获得足够的两种语言经验,这就不再是问题了(只适用于类似的自然语言,例如意大利语和西班牙语)。如果我们通常使用一种语言进行编程,而仅偶尔使用另一种语言,那么不幸的是,我们注定要在Scheme中编写Common Lisp,反之亦然;)
有用的一件事是使用两种其他颜色的语法高亮显示两种语言的独特视觉环境。那么至少我们将始终知道我们处于Common Lisp还是Scheme模式。