gpt4 book ai didi

lambda - let-over-lambda 书中的 cl-ppcre 阅读器

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

在书中Let Over Lambda : Chapter-4 cl-ppcre section , 实现了一个带有调度字符 #~ 的读取宏来获得类似于 Perl 的正则表达式匹配和替换语法。用于实现读取宏的函数是|#~-reader|。

这个函数是使用前面定义的两个宏实现的:

  • 匹配模式-ppcre-lambda-形式
  • subst-mode-ppcre-lambda-form

我想知道,除了教育目的之外,还有什么需要使用宏来完成上述两个任务?我使用简单的函数实现了一个变体:

(defun match-mode-alt (args)
`(lambda (x) (cl-ppcre:scan ,(car args) x)))

(defun subst-mode-alt (args)
`(lambda (x) (cl-ppcre:regex-replace-all ,(car args)
x
,(cadr args))))

然后我简单地使用了这些函数而不是相应的宏,它似乎工作正常。因为这些是函数,所以不需要双重准引用、一次性宏和其他与实际程序中的简单函数相比显然更难实现和调试的 Shiny 内容。

在这种特殊情况下,任何好处宏都具有过度功能?它不可能是高效的,因为这些函数最终会在读取阶段(通过读取宏)被调用,因此没有真正的运行时成本。

最佳答案

我认为,他们应该仅仅为了示例而使用宏...因为围绕 cl-ppcre: 调用构建 lambda 确实可以在阅读阶段,前提是阅读器宏不使用除字符串以外的任何其他形式,紧跟在宏字符之后。一般来说,黄金法则指出,在可以使用普通函数的情况下应避免使用宏。有时(例如,当需要控制参数的计算时)宏是不可避免的,但这个特定情况下的函数就足够了。

关于lambda - let-over-lambda 书中的 cl-ppcre 阅读器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622106/

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