我想问问你是否可以帮助我进行编程练习。我试图使这种形式的lambda表达式:如何在DrRacket Scheme中使用lambda
λz.x(yz)
我明白这个问题的方法,是y
是一个函数,应用到价值z
。然后x
是应用于如果功能y
被应用于z
时出现的功能。然后整个表达式这样说:
λz.x(yz) means: Do the following with the argument z:
- 应用功能
y
到z
。 - 将函数
x
应用于第一个过程的结果。
我做了这个计划,试图让计划做上述所有的:
(define (zlamb)
(lambda (z)
(lambda (x)
(* (lambda (y) (* z 4)) 2))))
当我运行它,我得到的是这样的:
Welcome to DrRacket, version 5.3 [3m].
Language: R5RS; memory limit: 128 MB.
((zlamb) 3)
procedure:...lambdaefing1.rkt:3:4
>
灿有人请向我解释我做错了什么?我想要得到的是(3 * 4) * 2 = 24
。所以我做了(或者以为我做了)内部函数y = z * 4
和外部函数x = y(z) * 2
。
我在互联网上搜索了所有的解释,但无法找到我在干草堆中寻找的特定针。
非常感谢Arafinwe,工作就像一个魅力。通过((zlamb)3)调用它,结果如预期的那样为24。你已经解释了如何嵌套lambda定义。在我的任务中,我必须做更深入的嵌套,但我相信我有这个想法。如果事实证明我没有,“我会回来”,使用一个着名的报价! – TheodorN
@TheódórNorðkvist没问题!顺便说一句,如果你想以正常的方式创建函数,那么正确的语法是'(define(zlamb z)...)'或'(define zlamb(lambda(z)...))''。然后,您可以通过执行'(zlamb 3)'而不是'((zlamb)3)'调用该函数。最后,如果您发现答案有帮助,则可以单击答案旁边的复选标记轮廓以及“向上”按钮。这让人们知道这个问题已经被这个答案回答了。 – ikdc
当我得到15的声望时会投票,再次感谢。我已经接受了答案,但这是否意味着当我试图明天进行更深层次的嵌套并遇到麻烦时,我必须提出另一个问题?你只知道你是否了解某些东西,当你尝试应用它时,或者失败或成功! – TheodorN