【发布时间】:2016-05-04 06:13:58
【问题描述】:
在video about functional programming 35:14 处,Jim Weirich 编写了一个函数来计算阶乘,而无需使用递归、库函数或循环: see image of Ruby code here
Ruby 中的代码
fx = ->(improver) {
improver.(improver)
}.(
->(improver) {
->(n) { n.zero ? 1 : n * improver.(improver).(n-1) }
}
)
我试图表达这种方法 F#
let fx =
(fun improver -> improver(improver))(
fun improver ->
fun n ->
if n = 0 then 1
else n * improver(improver(n - 1)))
我现在卡在
类型不匹配。期待一个 'a 但给定一个 'a -> 'b
当统一 ''a' 和 ''a -> 'b' 时,结果类型将是无限的
我似乎找不到正确的类型注释或其他表达函数的方式
编辑:
*没有 rec 关键字
【问题讨论】:
-
但无论如何都是递归
-
可能与“Y-combinator”stackoverflow.com/a/2000006/5763971 有关
-
@Alex 谢谢,我的意思是不使用 rec 关键字
-
你在哪里学习 F#?
-
fsharpforfunandprofit.com 很棒的网站,不需要数学博士就可以理解,用英语而不是行话写的
标签: f#