Mathematica 嵌套函数的 Ruby 方程?

发布于 2025-01-08 11:44:16 字数 202 浏览 0 评论 0原文

这是 Mathematica 的 Nest 函数定义。等式是什么?在鲁比?

想法是这样的:

nest(f, x, 3) #=> f(f(f(x)))

Here's Mathematica's Nest function Definition. What's the eqv. in Ruby?

The idea is this:

nest(f, x, 3) #=> f(f(f(x)))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乖不如嘢 2025-01-15 11:44:16

您可以使用 inject

def nest(f, x, n)
  n.times.inject(x) { |m| f.call(m) }
end

然后你可以这样调用它:

>> def f(x) 2*x end
>> nest(method(:f), 1, 3)
=> 8

如果你想要一个函数回来(即保留x未指定),那么你可以返回一个lambda:

def nestx(f, n)
  ->(x) { n.times.inject(x) { |m| f.call(m) } }
end

并像这样使用它:

>> nestx(method(:f), 3).call(1)
=> 8

或者你可以重新排列>嵌套参数并使用 Proc#curry

def nest(f, n, x)
  n.times.inject(x) { |m| f.call(m) }
end

>> method(:nest).to_proc.curry.call(method(:f), 3).call(1)
=> 8

如果想要看起来更像函数调用的东西,您还可以使用 [] 代替 call

def nest(f, n, x)
  n.times.inject(x) { |m| f[m] }
end

>> method(:nest).to_proc.curry[method(:f), 3][1]
=> 8

You could define your own using inject:

def nest(f, x, n)
  n.times.inject(x) { |m| f.call(m) }
end

Then you could call it like this:

>> def f(x) 2*x end
>> nest(method(:f), 1, 3)
=> 8

If you want a function back (i.e. leave x unspecified) then you could return a lambda:

def nestx(f, n)
  ->(x) { n.times.inject(x) { |m| f.call(m) } }
end

and use it like this:

>> nestx(method(:f), 3).call(1)
=> 8

Or you could rearrange the nest arguments and use Proc#curry:

def nest(f, n, x)
  n.times.inject(x) { |m| f.call(m) }
end

>> method(:nest).to_proc.curry.call(method(:f), 3).call(1)
=> 8

You can also use [] in place of call if want something that looks more like a function call:

def nest(f, n, x)
  n.times.inject(x) { |m| f[m] }
end

>> method(:nest).to_proc.curry[method(:f), 3][1]
=> 8
呆头 2025-01-15 11:44:16

我不懂 Ruby,但我查看了该语言的描述并编写了以下代码。

让它成为您的函数

def func(­x)  
   return sin(x­)
end

并定义一个嵌套函数,

def nest(­f, x, n)
    count = 0
    while count­<n
        x = send(f, x)
        count += 1
    end
    return x
end

将其调用为 nest(:func, 1, 3) 结果将是 0.67843047736074

我已将其与 http://www.wolframalpha.com 并得到了相同的答案。

I do not know Ruby, but I looked into the description of the language and wrote the following code..

Let it be your function

def func(­x)  
   return sin(x­)
end

and let define a nest function

def nest(­f, x, n)
    count = 0
    while count­<n
        x = send(f, x)
        count += 1
    end
    return x
end

Call it as nest(:func­, 1, 3) and result will be 0.67843047736074

I've compared it with the result on http://www.wolframalpha.com and got the same answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文