gpt4 book ai didi

Tcl:使用 tcl 8.6 编写 lambda 和映射

转载 作者:行者123 更新时间:2023-12-04 04:58:12 24 4
gpt4 key购买 nike

如何使用 tcl 8.6 功能“apply”和“lmap”编写和应用简单的 lambda 函数?

map (lambda x -> x*x) [list 1 2 3]

如何在 Tcl 8.6 中编写上述内容?手册页对我来说不是那么自我解释。

也许也是一个更高级的版本,但我想我可以自己弄清楚:
lambda y -> map (lambda x -> x*x) y

基本上我想改进这个版本:
proc \x {f val} {
set res [apply $f $val]
set res
}

set res [\x {x {expr $x*$x}} 5]
puts "res: $res"

这样我就可以写:
set res [\x {expr $x*$x} 5]
puts "res: $res"

最佳答案

这是什么 lambda看起来像:

proc lambda {arguments expression} {
list ::apply [list $arguments [list expr $expression]]
}

然后我们这样做,注意 {*}是必需的,因为内部 lambda 项不能直接作为命令而不会引起我们不想在 8.5(或 8.6)中遇到的其他麻烦:
set res [lmap x [list 1 2 3] {
{*}[lambda x {$x * $x}] $x
}]

8.6 lmap语法上类似于 foreach ,因此需要额外的应用层。然而,普通的 Tcl 程序员更容易理解它是这样的。

请注意,lambda 是完全一流的值,可以根据需要传递(放入变量、返回、存储在列表中,等等):
set square [lambda x {$x * $x}]

puts "the square of 42 is [{*}$square 42]"

(如果需要,您可以使用 λ 作为命令名称,但我觉得在这个键盘上输入很尴尬。不过我不建议使用 \x;Tcl 使用反斜杠来执行各种转义任务。)

关于Tcl:使用 tcl 8.6 编写 lambda 和映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493986/

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