更新
由于这些函数的一个效果是在通常不支持的方法上使用,所以我考虑分别将它们称为chain和copychain。不过,这似乎不太理想,因为未来的copychain可以说是一个更基本的概念,至少在函数式编程方面是如此。
原创
我现在称它为boxer。这段代码是用Python编写的,尽管问题很普遍:
def boxer(f):
"""Return a function g(o, *args, **keyargs) -> o
`g` calls `f` on `o` with the remaining arguments
and r
我读过关于JavaScript闭包的超级帖子,在我找到的答案之间似乎有一些出入,我希望我能得到一些进一步的澄清。
线程中的一些答案是在内部函数引用外部函数的变量时创建闭包的。
我找到了另一个答案,说这是一个终结:
var a = 42;
function b() { return a; }
注意,这里没有内部/外部函数,而只是一个函数。person给出的解释是,闭包是函数引用外部作用域的时候。
所以我的问题是,只有当有两个函数(内函数和外部函数),或者函数引用外部作用域时才创建闭包,而外部作用域可能是函数,也可能不是函数(在本例中,它只是顶级作用域)?
在函数式编程中,闭包被认为是不纯的吗?
似乎人们通常可以通过直接将值传递给函数来避免闭包。因此,应在可能的情况下避免闭包吗?
如果它们是不纯的,而且我正确地指出它们是可以避免的,那么为什么这么多函数式编程语言支持闭包?
纯函数的标准之一是:“给定相同的参数值(S),函数总是计算相同的结果值。”
假设
f: x -> x + y
f(3)不会总是给出相同的结果。f(3)依赖于y的值,而不是f的参数。因此,f不是一个纯函数。
既然所有闭包都依赖于不是参数的值,那么任何闭包怎么可能是纯的呢?是的,理论上闭包值可以是常数,但是仅仅通过查看函数本身的源代码就无法知道这一点。
这使我想到的是,同样的
因此,我正在尝试,并在scheme中创建了一种编程语言。我也为它构建了一个解释器,这是下面的大部分代码。
我想重写解释器,这样它就可以在更小的环境下构建闭包。在构建闭包时,它使用一个类似于当前环境的环境,但只包含闭包的函数部分中的自由变量。我正在学习memoization,但这很让人困惑。
编辑:我现在使用的球拍等同于这个,所以如果在那里更容易,你应该给我建议。
(define-struct var (string)) ;; a variable, e.g., (make-var "foo")
(define-struct int (num)) ;; a constant nu
我试图创建一个界面,用户单击一个TkInter按钮来选择一种语言,然后该按钮调用一个函数(带有特定语言的参数)来设置程序的语言。
我尝试使用Lambdas来传递函数,但这没有起作用。
def showLangButtons():
tk = Tk()
root = Canvas(tk, width=100, height=100)
root.pack()
langButtons = []
langs = []
for a in langf:
langs.append(a)
for a in sorted(langs):