我做面向对象编程也有几年了,函数式编程做的不多。我对飞行模拟器很感兴趣,并且对 Lisp 的函数式编程方面感到好奇。在面向对象的范例中,飞行模拟器或任何其他现实世界模拟器对我来说都是有意义的。
这是我的问题:
面向对象是表示现实世界模拟领域的最佳方式吗?
我知道 Common Lisp 有 CLOS(lisp 为 OO),但我的问题实际上是关于用函数式语言编写飞行模拟器。那么如果你打算用 Lisp 编写它,你会选择使用 CLOS 还是以函数式方式编写?
有人对用 Lisp 或任何函数式语言编写飞行模拟器有什么想法吗?
更新 11/8/12 - 对于那些感兴趣的人来说,有一个类似的问题 ->函数式编程如何应用于模拟? https://stackoverflow.com/questions/3431654/how-does-functional-programming-apply-to-simulations
将“Lisp”视为一种函数式语言是一个常见的错误。实际上,最好将其视为一个语言家族,但现在,当人们说 Lisp 时,他们通常指的是 Common Lisp。
Common Lisp 允许函数式编程,但它本身并不是函数式语言。相反,它是一种通用语言。方案是一个更小的变体,在方向上更具功能性,当然还有其他变体。
至于你的问题,这是一个好的选择吗?这实际上取决于您的计划。 Common Lisp 在这类事情上尤其具有一些真正的优势。它既具有交互性又具有内省性,达到了您通常在所谓的脚本语言中看到的水平,从而使其开发速度非常快。同时,它经过编译并具有高效的编译器,因此您可以期望获得与其他高效编译器相同的性能(典型的 ime 是 c 的两倍)。虽然它是一种大型语言,但它的设计比 C++ 等语言更加一致,并且元编程功能可以为您的特定应用程序编写非常干净、易于理解的代码。如果只看这几个方面
common lisp 看起来棒极了。
然而,也有缺点。社区很小,如果您正在寻找帮助,您不会找到很多人。虽然内置库很大,但您找不到那么多的第三方库,因此您最终可能需要从头开始编写更多内容。最后,虽然它绝不是一个有围墙的花园,但 CL 并不像 python 那样能够与外国库顺利集成。这并不意味着你不能调用 C 代码,有一些很好的工具可以实现这一点。
顺便说一句,CLOS 是我能想到的最强大的 OO 系统,但如果您来自主流的 c++/java/c#/etc,那么这是一种完全不同的方法。 OO 背景(是的,它们不同,但除了单个与多个英寸之外,没有那么多),一开始您可能会发现它有点奇怪,几乎翻了个底朝天。
如果你走这条路,你将不得不注意实际渲染管道的一些性能问题(如果你自己用 CLOS 编写的话)。类系统具有令人难以置信的运行时灵活性(即在运行时更新类定义不是通过猴子修补等,而是通过实际更改类和更新实例),但是您为此支付了一些调度成本。
无论如何,我过去曾将 CL 用于需要数值效率的研究代码,即不同类型的模拟。这对我来说很有效。在这种情况下,我并不担心使用现有代码——它不存在,所以无论如何我几乎都是从头开始编写所有内容。
总之,对于该项目来说,它可能是一个很好的语言选择,但不是唯一的选择。如果您不使用既具有高级方面又具有良好性能的语言(例如 CL、OCaml 和其他一些语言),我肯定会考虑使用 lua 等语言或也许使用两级方法的可能性python(很多库)在一些 C 或 C++ 代码之上,完成繁重的工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)