如何在Javascript中实现letrec?

如何在Javascript中实现letrec?,javascript,recursion,functional-programming,scheme,letrec,Javascript,Recursion,Functional Programming,Scheme,Letrec,下面的combinator以一种创造性(有些人会说滥用)的方式使用默认参数,其行为类似于Scheme的letrec*: *如果我错了,请纠正我,我不太了解这个计划 constbind=f=>f(); 常量main=bind( (x=2,y=x*x,z=y*y,total=x+y+z,foo=“foo”)=>[x,y,z,total,foo]); 控制台日志(主)嵌套绑定使用let*定义,相互递归绑定-使用letreclet*只是转换成一系列嵌套的一个绑定lets,就像您所展示的那样。这里没有递

下面的combinator以一种创造性(有些人会说滥用)的方式使用默认参数,其行为类似于Scheme的
letrec
*:

*如果我错了,请纠正我,我不太了解这个计划

constbind=f=>f();
常量main=bind(
(x=2,y=x*x,z=y*y,total=x+y+z,foo=“foo”)=>[x,y,z,total,foo]);

控制台日志(主)嵌套绑定使用
let*
定义,相互递归绑定-使用
letrec
let*
只是转换成一系列嵌套的一个绑定
let
s,就像您所展示的那样。这里没有递归,没有闭包。
bind
没有类型,但是只要断言默认参数的类型,就可以为其调用指定类型。为什么不直接使用
const
return
?并非所有内容都需要是表达式,但在您展示的示例中没有相互递归。没有共享作用域,只有嵌套作用域。另请参见。不依赖,表示。你说“Q的关键是相互递归”,所以我回答了这个问题。只是澄清一下。嵌套绑定是用
let*
定义的,相互递归的绑定是用
letrec
定义的
let*
只是转换成一系列嵌套的一个绑定
let
s,就像您所展示的那样。这里没有递归,没有闭包。
bind
没有类型,但是只要断言默认参数的类型,就可以为其调用指定类型。为什么不直接使用
const
return
?并非所有内容都需要是表达式,但在您展示的示例中没有相互递归。没有共享作用域,只有嵌套作用域。另请参见。不依赖,表示。你说“Q的关键是相互递归”,所以我回答了这个问题。我只是想澄清一下。