Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop GoF'的功能实现(如在Haskell中);Lexi编辑器应用程序_Oop_Haskell_Functional Programming_Design Patterns - Fatal编程技术网

Oop GoF'的功能实现(如在Haskell中);Lexi编辑器应用程序

Oop GoF'的功能实现(如在Haskell中);Lexi编辑器应用程序,oop,haskell,functional-programming,design-patterns,Oop,Haskell,Functional Programming,Design Patterns,我试图理解如何使用函数式编程来实现通常使用OO/命令式方法实现的应用程序 应用程序的一个重要类别是编辑器(Word、Evernote、PowerPoint、Photoshop等) 我们把GoF的编辑器应用作为一个有代表性和众所周知的例子,它在GoF书中详细描述了面向对象/命令式解决方案。 如何在Haskell中编写GoF的Lexi应用程序的等价物 那有可能吗?在OO/命令式方法和FP/不可变方法中,时间/内存复杂性如何比较 在Haskell中实现时,该应用程序(Lexi)的总体架构是什么 与Go

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

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

我们把GoF的编辑器应用作为一个有代表性和众所周知的例子,它在GoF书中详细描述了面向对象/命令式解决方案。 如何在Haskell中编写GoF的Lexi应用程序的等价物

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

在Haskell中实现时,该应用程序(Lexi)的总体架构是什么

与GoF书中描述的非功能性/面向对象解决方案相比,它是好是坏

谢谢你的阅读

编辑/答复:

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


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

我将回答一个有客观答案的问题:

(用Haskell编写GoF的Lexi应用程序的等价物)可能吗?在OO/命令式方法和FP/不可变方法中,时间/内存复杂性如何比较


是的,这是可能的。与“OO/基本方法”相比,Haskell中没有固有的时间/内存复杂性约束,如果您承认像。如果没有圣莫纳德,这是一个巨大的挑战。它们肯定在
log(M)
的时间性能系数内,其中
M
是可变系统中使用的内存量;通过从树中构建可变内存系统,可以很容易地看出这一点。

对于堆栈溢出,这个问题似乎有点离题。我对设计模式的经验是,它们分为两类。它们要么只是一个单一的数据类型,要么是一个不能在代码中进行一般描述的组件,因此这里有一个关于如何进行一般性组件的英语描述。在表达能力更强的语言中提供更好的抽象,使更多的后一类语言能够自行成为编程组件。您的问题请回答者解释如何开发整个应用程序,并与另一种语言中的应用程序进行比较和对比。你似乎很难想象范式转变的另一面会是什么样子;要找到答案,首先要全心全意地学习新范式。回答这个问题是不可能的吗?我不这么认为。另外,在命令式编程模型中,我们假设随机内存访问是O(1)。有人可能会说这是不正确的,渐进地说,因为物理内存访问仍然需要通过log(M)逻辑门。如果考虑到这一点,那么函数语言中基于树的内存表示形式看起来就没那么糟糕了。