gpt4 book ai didi

Java FoldMap 列表,或 "how to get around the lazy/eager dissonance"

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:33 35 4
gpt4 key购买 nike

我正在移植 this package到 Java,并试图解决两种语言之间懒惰/急切的不和谐而陷入困境。我不认为它会像现在这样严重,因为实现完全取决于函数类型,但我想我错了。我如何保持足够的懒惰来让它工作?或者,我如何尽可能少地重写它,使其对 Java 变得足够渴望?

代码

现在可以直接在 pastebin 上使用,谢谢你告诉我。

InfiniteListException.java

TransformFunc.java

TransformCSFunc.java

FM.java

FMList.java

问题

我几乎在每个“函数式”方法上都会遇到堆栈溢出(呵呵),并且几乎必须不断调用 force() 以防止它们发生,即使 不是 功能性编码。

最佳答案

你会讨厌我的回答,因为将代码从函数式语言转换为命令式语言真的很痛苦,即使它没有出现在前面。

基本上您可以做两件事:

  1. 重写以移除递归。这并不总是可能的,也不容易。有时,有一种算法可以做到这一点(我脑海中唯一能想到的是当函数是尾递归时,但可能还有更多)。其他时候,您必须自己完成工作并编写一个与原始函数功能相同但不使用递归的自定义函数。

  2. 您可以构建自己的类似调用堆栈的系统来代替语言正在使用的调用堆栈。这允许您对函数式语言进行优化,但命令式语言不会,它允许您为每个函数拥有一个堆栈,这确实减少了堆栈耗尽的机会,它还允许您拥有一个堆栈你喜欢的尺寸。

当然,您可以根据需要组合使用这两种技术,因为基本上您需要为脚本中使用的每个函数提供解决方案。

正如我所说,这不是好消息。这是一个非常糟糕的消息,因为这意味着如果您想将这个(或任何其他)函数库移植到命令式世界,还有很多工作要做。

关于Java FoldMap 列表,或 "how to get around the lazy/eager dissonance",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9146687/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com