GoF的Lexi Editor应用程序的功能实现(例如,在Haskell中)
我想了解如何使用函数式编程来实现通常使用面向对象/命令式方法实现的应用程序。
一类重要的应用是编辑(Word,Evernote,PowerPoint,Photoshop等)。
让我们考虑GoF的Lexi编辑器应用程序,作为代表性的着名示例,其GoF书中详细描述了其面向对象/必要的解决方案。
如何在Haskell中编写相当于GoF的Lexi应用程序?
这是可能的吗? 在OO /命令式与FP /不可变式方法中,时间/内存复杂性如何比较?
在Haskell中实现该应用程序的一般体系结构(Lexi)是什么?
与GoF书中描述的非功能/面向对象解决方案相比,它会更好还是更差?
谢谢阅读。
编辑/回答:
“ Haskell表达学派 ”一书似乎回答了这个问题。 它显示了(除其他外)如何在Haskell中开发图形编辑器。
编辑2:此演示文稿似乎也回答了这个问题(不直接通过)。
我会解决你的一个问题,它有一个客观的答案:
是否可以在GoFell中写入相当于GoF的Lexi应用程序? 在OO /命令式与FP /不可变式方法中,时间/内存复杂性如何比较?
是的,这是可能的。 如果你承认像ST monad这样简单的东西,Haskell就没有固有的时间/内存复杂性约束,相比“OO /不确定的方法”。 如果没有ST monad,那么具有延迟评估的纯功能语言是否可以实现与可变语言相同的时间性能,这是一个开放的问题。 它们当然在log(M)
的时间性能因子内,其中M
是在可变系统中使用的内存量; 这可以通过从树中构建可变内存系统来轻松看到。
上一篇: Functional implementation (e.g. in Haskell) of GoF's Lexi Editor application