DolphinDB 脚本闭包只能识别变量,不能识别函数调用?

def f1(argf){
g = def(): argf
}
// OK 
def f2(argf){
g = def(): argf()
}
// Syntax Error: [line #37] Cannot recognize the token argf
// 对应 python 
def f1(argf):
    g = lambda: argf
def f2(argf):
    g = lambda: argf()


请先 登录 后评论

1 个回答

alex

是的 Python 和 DolphinDB 的函数名称查找过程不同, 闭包的实现也不同

不过可以通过两种办法绕过

1. 部分应用

def f(argf){
    g = def(arg){return arg()}{argf}
}

2. 采用 call 函数间接调用

def f(argf){    
g = def(): call(argf)

另外可以看一下使用 DolphinDB 脚本实现的 z 组合子: (参考了 https://lptk.github.io/programming/2019/10/15/simple-essence-y-combinator.html)

def mkrec(f){ return f(f)}
mkrec_nice = def(g): mkrec(def(rec): call(g, def(y): rec(rec)(y)))
fact = mkrec_nice( def(rec){return def(x,rec){ if(x == 0) {return 1} else{return  rec(x - 1) * x} }{, rec}}) 
fact(2)
fact(3)
fact(4)
请先 登录 后评论
  • 1 关注
  • 0 收藏,799 浏览
  • chris 提出于 2022-10-26 10:13

相似问题