gpt4 book ai didi

lisp - 不适合动态范围界定的任务

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

你能给我一些不适合动态作用域 lisp 的任务示例吗?我看不出 Lexical 作用域如何更好,而不仅仅是改变编码风格的问题,所以我很想编写一些代码并亲眼看看。

谢谢!

最佳答案

(define (add n) (lambda (m) (+ n m)))
(define add4 (add 4))
(map (add 7) (list 1 2 3))

但这只是一个随机的小例子。如果你深入挖掘,你会发现很多额外的原因。要进行更彻底的讨论,您真的应该阅读一些教科书。我对此的建议是 PLAI .

这里还有一个演示:

(define tax 0.17)
(define (add-tax amt) (+ amt (* amt tax)))

看起来 add-tax 是一个返回给定金额并添加了正确税率的函数——但您永远不能相信这种情况。例如,它可以这样调用:

(let ((tax -0.17)) (add-tax 100))

你会得到完全错误的答案。但如果您的语言是真正动态范围的,情况会更糟:您不能依赖任何 绑定(bind),包括函数。考虑一下:

(let ((+ -)) (add-tax 100))

顺便说一句,Elisp 和 CL 并没有直接遭受这个问题的困扰,它们使用双命名空间之类的东西,以及关于隐藏“内置”绑定(bind)的规则。

关于lisp - 不适合动态范围界定的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3578187/

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