// ============================================================ // Monkey 案例 1:函数是值,闭包和递归 // // 下面的命令假设当前在仓库根目录。已经 cd 到 posts/monkey 时, // 把路径里的 posts/monkey/ 去掉即可。 // // 这个 .txt 同时是三样东西: // - 网页上的纯文本:/posts/monkey/case_function.txt // - 终端里的源码:cat posts/monkey/case_function.txt // - 可执行脚本:monkey posts/monkey/case_function.txt // // 在浏览器终端或 SSH 里直接输入最后那条命令就能运行。 // 从本地走 SSH 一次性命令(<站点> 换成首页横幅里的地址): // ssh -p 443 <站点> 'monkey posts/monkey/case_function.txt' // // 输出可以继续接管道: // monkey posts/monkey/case_function.txt | head -n 3 // ============================================================ let square = fn(x) { x * x }; let makeAdder = fn(n) { fn(x) { x + n } }; let factorial = fn(n) { if (n == 0) { 1 } else { n * factorial(n - 1) } }; let addTen = makeAdder(10); puts(square(7)); puts(addTen(5)); puts(factorial(6)); // 函数可以当参数,也可以当返回值: let apply = fn(f, x) { f(x) }; puts(apply(square, 12)); // return 提前结束函数: let abs = fn(n) { if (n < 0) { return -n; } n }; // 最后这条是表达式的值,会作为脚本结果输出 abs(-42)