据我所知,在Scala中,也可以调用函数
例如,给定以下声明,我们是否知道如何调用该函数?
宣言:
def f (x:Int, y:Int) = x;
Run Code Online (Sandbox Code Playgroud)
呼叫
f (1,2)
f (23+55,5)
f (12+3, 44*11)
Run Code Online (Sandbox Code Playgroud)
请问有什么规定?
我一直认为Haskell会做一些自动智能记忆.例如,天真的斐波那契实施
fib 0 = 0
fib 1 = 1
fib n = fib (n-2) + fib (n-1)
Run Code Online (Sandbox Code Playgroud)
因此会很快.现在我读了这个,似乎我错了--Haskell似乎没有做自动记忆.或者我理解错了什么?
还有其他语言可以自动(即隐式,非显式)进行记忆吗?
实施备忘录的常用方法有哪些?在我看到的所有示例实现中,它们都使用了散列映射,但其大小没有任何限制.显然,这在实践中不起作用,因为你需要某种限制.鉴于此,它变得更加复杂,因为当你达到极限时,你必须扔掉一些数据.并且它变得复杂:如果限制可能是动态的并且经常使用的功能应该比不常使用的功能具有更高的限制吗?当你达到极限时,你扔掉了什么条目?只是最新使用的一个?在这种情况下,您还需要对数据进行排序.您可以使用链接列表和哈希映射的某种组合来实现这一点.这是常见的方式吗?
你可以链接(或参考)一些常见的实际实现吗?
谢谢,艾伯特
编辑:我最感兴趣的是我描述的问题,即如何实现这样的限制.对任何解决这个问题的论文的任何引用都会非常好.
编辑:可以在此处找到一些示例实现(具有限制)的想法.
编辑:我不是试图解决特定应用程序中的特定问题.我正在寻找用于memoization的通用解决方案,它可以全局应用于(纯功能)程序的所有功能(因此不实现内存限制的算法不是解决方案).当然,(可能)没有最佳/最佳解决方案.但这使我的问题不那么有趣.
为了尝试这样的解决方案,我考虑将其添加到Haskell作为优化.我真的很想知道这会有多好.
我想知道是否有人已经这样做了.