GoF的Lexi Editor应用程序的功能实现(例如在Haskell中)

jhe*_*dus 2 oop haskell design-patterns functional-programming

我试图理解如何使用函数式编程来实现通常使用OO /命令式方法实现的应用程序.

一个重要的应用程序类别是编辑器(Word,Evernote,PowerPoint,Photoshop等).

让我们将GoF的Lexi Editor应用程序视为一个代表性和众所周知的示例,其面向对象/命令式解决方案已在GoF书中详细描述.

如何在Haskell中编写GoF的Lexi应用程序的等价物?

这有可能吗?在OO /命令式与FP /不可变方法中,时间/内存复杂度如何比较?

当在Haskell中实现时,该应用程序(Lexi)的一般架构会是什么?

如何比GoF书中描述的非功能性/面向对象的解决方案更好还是更差?

谢谢阅读.

编辑/回答:

" 哈斯克尔表达学派 "这本书似乎回答了这个问题.它显示了(除其他外)如何在Haskell中开发图形编辑器.

编辑2:这个演示文稿似乎也回答了这个问题(不是直接).

Cir*_*dec 7

我将解决你的一个客观答案的问题:

是否可以[在Haskell中编写相当于GoF的Lexi应用程序]?在OO /命令式与FP /不可变方法中,时间/内存复杂度如何比较?

是的,这是可能的.与"OO /不完全方法"相比,Haskell没有固有的时间/内存复杂性约束,如果你承认像ST monad这样简单的东西.如果没有ST monad,那么具有惰性评估的纯函数语言是否可以实现与可变语言相同的时间性能是一个开放的问题.他们是肯定的实时性能的因素中log(M),其中M是在可变系统使用的内存量; 通过从树中构建可变内存系统可以很容易地看出这一点.

  • 此外,在命令式编程模型中,假设随机存储器访问是O(1).有人可能认为这是不正确的,渐近地说,因为物理内存访问仍然需要通过log(M)逻辑门.如果你考虑到这一点,那么基于树的内存表示可以用功能语言看起来不那么糟糕. (4认同)