函数式语言对于飞行模拟器来说是一个不错的选择吗? Lisp 怎么样?

2023-12-20

我做面向对象编程也有几年了,函数式编程做的不多。我对飞行模拟器很感兴趣,并且对 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(使用前将#替换为@)

函数式语言对于飞行模拟器来说是一个不错的选择吗? Lisp 怎么样? 的相关文章

  • Haskell 将两个列表中不同索引处的元素组合起来

    对这个糟糕的标题表示歉意 我不太确定如何用语言描述它 但这就是我的意思 如果您知道更好的表达方式 请告诉我 假设我有 2 个长度相等的列表 a b c x y z 我想创建列表 a y z b x z c x y 本质上 对于 list1
  • Scala:抽象类型模式 A 未被选中,因为它已被擦除消除

    我正在编写只能捕获特定类型异常的函数 def myFunc A lt Exception try println Hello world or something else catch case a A gt warning abstrac
  • 功能段落

    抱歉 我还不太明白 FP 我想将一系列行分割成一系列行序列 假设一个空行作为段落划分 我可以在 python 中这样做 如下所示 def get paraghraps lines paragraphs paragraph for line
  • 如何模拟 Stripe 订阅续订失败? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试测试不同的 Stripe 订阅失败 具体来说 当卡最初被接受且订阅处于活动状态时 有效订阅被续订 但续订付款被拒绝 或者客户在订阅期间
  • 返回元组的第一个元素

    假设我创建一个将两个整数相加的函数 def addInt a Int b Int Int Int val x a b x 2 我回来了 result 2 故意为了这个问题 现在我想创建一个仅返回 x 的变量 val result addIn
  • 修改功能;保存到 Lisp 中的新函数

    所以我认为 lisp 在其他语言中 的优点之一是它能够实现函数工厂 接受函数作为参数 返回新函数 我想使用此功能对函数进行小的更改并将其保存为新函数 这样如果对原始函数进行更改 它们也会反映在它所基于的新函数中 注意 我不是编写原始函数的人
  • 这个洗牌算法有什么问题吗?

    我一直在做一些休闲假期计算 我的迷你项目是模拟意大利游戏 tomboli 一个关键的组成部分是对以下过程的模拟 游戏由一名男子控制 他拿着一袋 90 个弹珠 编号为 1 到 90 他从袋中随机取出一颗弹珠 每次向玩家喊出弹珠编号 经过一番思
  • 如何使用 swift flatMap 从数组中过滤掉选项

    我对 flatMap 有点困惑 添加到 Swift 1 2 假设我有一些可选类型的数组 例如 let possibles Int nil 1 2 3 nil nil 4 5 在 Swift 1 1 中 我会做一个过滤器 然后是一个像这样的地
  • 使用 ocaml List.fold_left 列表中的最后一个元素

    我可以通过以下代码找到列表的最后一个元素 let last xs a list a let rec aux xs prev match xs with gt prev x ys gt aux ys x in match xs with gt
  • Lisp 中的 (定义 (平均 ....))

    我只是在玩scheme lisp 并正在考虑如何纠正我自己的定义average 我不确定如何做一些我认为需要的事情 定义一个接受任意数量参数的过程 计算这些参数 将参数列表传递给 以将它们加在一起 有人有定义的例子吗average 我似乎对
  • python函数返回函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 解决斐波那契数列的 Lisp 方法

    我想尝试学习 Lisp 但很快就放弃了 我想我会再试一次 我正在看 求 400 万以下所有偶数斐波那契数的总和 我写了下面的代码 它可以工作 但是很丑陋 其中最主要的是它太慢了 因为它一直在进行简单的递归 当我用 Python 编写这个程序
  • Swit 中的函数式编程将数组元素分配到正确的“桶”

    我是函数式编程的新手 我的问题是我有一个主数组和固定数量的 目标 数组 我想根据每个元素的特定值将主数组中的元素分配到正确的结果数组中 我猜测一种方法是使用一个映射函数来遍历主数组元素 确定正确的 目标数组 值 基于某种逻辑 然后将元素添加
  • f# 运行总计序列

    好吧 这看起来应该很容易 但我就是不明白 如果我有一个数字序列 如何生成由运行总计组成的新序列 例如 对于序列 1 2 3 4 我想将其映射到 1 3 6 10 以适当的功能方式 Use List scan https msdn micro
  • 单位安全平方根

    我只是想知道如何以与 F 正确交互的方式编写用户定义的平方根函数 sqrt 单位制 http blogs msdn com andrewkennedy archive 2008 09 04 units of measure in f par
  • 正确使用术语 Monoid

    从下面的例子来看 我认为这样的说法是正确的String在串联运算下定义了一个幺半群 因为它是关联二元运算 并且String碰巧有一个身份元素 它是一个空字符串 scala gt Jane Doe Jane Doe res0 Boolean
  • F# 检查列表是否为空

    作为 F 新手 我正在尝试实现一个简单的函数 该函数将索引和列表作为参数 然后返回给定索引的列表值 let rec getElementAtIndex index int list a list match index list with
  • 为什么 Javascript 函数在实例化时的行为与执行时的行为不同?

    我来自 C PHP 并试图了解 Javascript 的想法 即函数是变量 对象并且具有准构造函数等 任何人都可以解释为什么以下代码会起作用 即 为什么实例化变量 函数时不显示 2 test 为什么执行变量 函数时不显示 1 test co
  • 为什么Racket中foldl的定义方式很奇怪?

    在 Haskell 中 与许多其他函数式语言一样 函数foldl被定义为 例如 foldl 0 1 2 3 4 10 这没关系 因为foldl 0 1 2 3 4 根据定义 0 1 2 3 4 但是 在 球拍 中 foldl 0 1 2 3
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出

随机推荐

  • 将图像旋转 3*Double.pi/2 使图像不出现(swift3)

    尝试将图像方向旋转 270 度 我可以旋转 90 度并且图像出现 但是当将图像旋转 270 度时什么也没有发生 我添加了两张 90 度和 270 度命令的图片 以使事情更加清晰 extension CIImage var image UII
  • 将兄弟姐妹分组到一个 div 中

    我在一家公司工作 该公司使用编码非常奇怪的电子商务解决方案 我无法直接访问电子商务商店的代码 因为它是由该特定公司托管的 我会废除整个系统 但客户相当依恋它 这就是他们想要的 这是我必须处理的内容 tbody tr td class Pro
  • firebase 和 swift - 此类不符合键值编码 -----

    我知道还有其他类似的问题 但我认为我的问题是如何访问 firebase 而不是插座 因为我的错误位于 IBAction 函数中 该函数可以在错误发生之前调用 IBAction func sign in out tapped sender U
  • 使用 DSC Resource 配置 HKEY_CURRENT_USER 实际上会更新 HKEY_USERS\.DEFAULT

    以下 DSC 声明写入注册表项 HKEY USERS DEFAULT Console 而不是 HKEY CURRENT USER Console 为什么 Registry ConsoleFaceName Key HKEY CURRENT U
  • 从字符串向量中提取第 n 个字符[重复]

    这个问题在这里已经有答案了 我有一个行向量 如下所示 1 118 o m n a jpg 2 122 m f h a jpg 3 152 y f n a jpg 4 160 y m h a jpg 5 083 o m a a jpg 例如
  • Asp.Net SQL刷新页面重复插入?

    我有一个 aspx 页面 其中包含一个文本框和一个按钮 当用户在文本框中输入信息并单击 发布 时 它会将数据插入到我的 sql 数据库中 问题是 如果用户点击刷新 它将继续将相同的数据插入数据库 我很确定调用了整个 单击 方法 而不仅仅是插
  • 将多个字符串传递给 SharedPreferences

    我想存储三个字符串作为我的应用程序的用户首选项 我已经设置了一个很好的布局 只需将字符串保存到 SharedPreferences 即可 我还想知道如何在下一个活动中检索这些字符串 下面是我当前的代码 如果有人可以向我展示如何将此功能添加到
  • Java Web Start应用程序可以从本地系统读取文件,但不能写入[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 请询问您是否需要更多信息 我有安全和所有权限标签 在我的 jnlp 中 当我离线运行我的 java 应用程序时 它可以正常工作 F
  • AWS API Gateway 和 Lambda 的公共 IP 地址(无 VPC)

    我已经配置了一个 AWS API Gateway 并创建了一个 Lambda 函数来连接到外部 REST API API网关和Lambda不在VPC中 因此出口IP地址是随机的 我面临的挑战是外部 REST API 位于防火墙后面 这需要将
  • 如何在 GDScript 中实现结构?

    GDScript 中是否有相当于 C 结构 类的东西 例如 struct Player string Name int Level 戈多3 1 1gdscript不支持structs 但使用可以实现类似的结果classes dict or
  • Windows 7 64 / Visual Studio 2008 / OpenCV2.1错误:“应用程序无法正确启动(0xhex)..”

    我正在 64 位模式下从分支顶部构建 OpenCV2 1 当我将库链接到我的代码 在 XP 上以 32 位模式工作 时 我收到对话框 应用程序无法正确启动 0xc0150002 单击 确定 关闭应用程序 当我启动应用程序时 事件查看器指向
  • 将一个时间范围按其他时间范围分割成多个部分

    我有一项复杂的任务 几天来我一直在用头撞墙 我已经尝试了大约 4 种不同的方法 但是每种方法似乎都停滞不前 并且变得非常令人沮丧 我有一个时间范围 例如 14 30 00 至 18 30 00 考虑某人轮班的时间范围 在此时间范围内 他们表
  • jasmine 与 jscoverage 自动化测试

    一直在看 jsunit 和 jcoverage 演示 单击覆盖率报告链接 在新选项卡中打开此内容 我想知道是否有人对 Jasmine 和 JSCoverage 做过类似的事情 我有点不确定如何继续 编辑 我想知道有什么可以和茉莉花记者一起做
  • fopen b 标志是什么

    在阅读中php fopen 的文档 http php net manual en function fopen php对于 php 我看到以下内容 为了可移植性 强烈建议您在使用以下命令打开文件时始终使用 b 标志fopen http ph
  • 某些 lua/c++ 代码中出现 SIGSEGV 错误

    以下代码以 SIGSEGV 错误结束 extern C include lua lua h include lua lualib h include lua lauxlib h int main int argc char argv lua
  • 创建具有左偏概率分布的随机数

    我想在 1 100 之间随机选择一个数字 这样获得数字 60 100 的概率高于 1 59 我希望数字 1 100 的概率为左偏分布 也就是说 它有一个长尾和一个峰 大致意思是 pers np arange 1 101 1 prob
  • 在 IF ELSE 块中包含 InstallDir

    我尝试使用以下代码 The default installation directory InstallDir PROGRAMFILES PRODUCT NAME to include x64 nsh If RunningX64 The d
  • css 中的图像轮播无法正常工作

    我正在制作一个网站的轮播 但宽度有问题 我希望每个图像都占据视口的整个宽度 但最后一个图像出现在第一个图像的下方 即使滑块动画也无法通过在右侧滑动额外内容来正确滑动图像 任何帮助 将不胜感激 carousel container carou
  • 将 Angular2 应用程序包含到 Asp.Net Webforms 页面

    当我将 angular cli ng build 生成的带有 aot 配置的 js 文件包含到我的 aspx 页面中时 我在 Chrome 控制台中收到一条错误消息 gt TypeError Error parameterCount is
  • 函数式语言对于飞行模拟器来说是一个不错的选择吗? Lisp 怎么样?

    我做面向对象编程也有几年了 函数式编程做的不多 我对飞行模拟器很感兴趣 并且对 Lisp 的函数式编程方面感到好奇 在面向对象的范例中 飞行模拟器或任何其他现实世界模拟器对我来说都是有意义的 这是我的问题 面向对象是表示现实世界模拟领域的最