16得票2回答
提前跳出begin/end块

我希望有一种方式可以在退出一个begin/end块时仍然给其结果分配一个变量。def foo @foo ||= begin puts "running" return "leaving early" if true # would be some sort of calc...

16得票2回答
选择延续传递样式和记忆化的区别

在撰写函数式语言中关于记忆化和延续传递样式(CPS)函数的示例时,我发现在 Fibonacci 的例子上两者都能用。然而,Fibonacci 并不真正从 CPS 中受益,因为循环仍然必须以指数级运行,而使用记忆化的时间复杂度是仅在第一次为 O(n),之后每次为 O(1)。 将 CPS 和记忆...

16得票3回答
使用useMemo在渲染期间更新React Hooks状态

在渲染期间设置状态时,useMemo是否仅用于避免额外的引用相等性检查代码/变量? 例如:使用来自此罕见的文档化用例的setState与useMemo: function ScrollView({row}) { let [isScrolling, setIsScrolling] = u...

15得票5回答
在Clojure中,是否可能结合记忆化和尾调用优化?

在Clojure中,我想编写一个尾递归函数,可以记忆其中间结果以供后续调用。 [编辑:本问题已使用gcd作为示例重写,而不是factorial。] 可将记忆化的gcd(最大公约数)实现如下:(def gcd (memoize (fn [a b] (if (zero? b) ...

15得票5回答
Haskell中动态规划的高效表格

我已经使用Haskell编写了0-1背包问题的代码。到目前为止,我对实现的惰性和通用程度感到相当自豪。 我首先提供了创建和处理惰性二维矩阵的函数。 mkList f = map f [0..] mkTable f = mkList (\i -> mkList (\j -> f ...

15得票8回答
如何在C#中从“纯函数”获得优化?

如果我有以下函数,它被认为是纯的,因为它没有副作用,并且在给定相同输入 x 的情况下总是产生相同的结果。public static int AddOne(int x) { return x + 1; } 据我所知,如果运行时能够理解函数式纯度,它就可以优化执行,以便无需重新计算返回值。 在C...

15得票6回答
方法调用中是否有记忆化的约定?

我希望避免在方法调用中重新评估一个值。到目前为止,我一直是这样做的:def some_method @some_method ||= begin # lot's of code end end 但是它最终看起来相当丑陋。在一些代码中,我看到了以下类似的内容:def some_m...

15得票3回答
在Ruby中,我应该使用||=还是if defined?来进行记忆化?

我应该使用if defined吗? return @current_user_session if defined?(@current_user_session) @current_user_session = UserSession.find 或者 ||=@current_user_ses...

15得票3回答
高效地记忆化对象参数

摘要: 除了使用 JSON.stringify,是否有更快的哈希对象的方法? 详情: 我有一个Ruby和JavaScript库(NeatJSON),它提供了JavaScript值的漂亮打印。最近,我修复了一个问题,深度嵌套的对象导致 O(n!) 性能问题(n 是嵌套级别),使用基于被序列化的...

14得票2回答
这个记忆化动态规划表为什么在SPOJ上太慢了?

剧透警告:我正在解决http://www.spoj.pl/problems/KNAPSACK/,如果你不想被可能的解决方案剧透,请勿查看。 模板: import Data.Sequence (index, fromList) import Data.MemoCombinators (mem...