天道酬勤,学无止境

像 SymPy 这样的 Haskell 库? [关闭](Haskell library like SymPy? [closed])

问题

我需要操作像 1 + sqrt(3) 这样的表达式并做基本的算术,比如加法、减法和除法。 我希望结果采用某种规范形式,以便它可以用作地图中的键。 由于舍入问题,将 1 + sqrt(3) 转换为浮点数是不可行的。

我在 Python 中使用 SymPy 来完成这个任务。 Haskell 是否有等效的本机库?

回答1

请查看号码包。 如果您只需要存储像“1 + √3”这样的精确数字,您可能需要使用 Data.Number.CReal 而不是符号算术。 它存储表达式,并可以在需要时计算为任意数量的数字。

Prelude Data.Number.CReal> let cx = 1 + sqrt (3 :: CReal)
Prelude Data.Number.CReal> showCReal 400 cx 
"2.7320508075688772935274463415058723669428052538103806280558069794519330169088000370811461867572485756756261414154067030299699450949989524788116555120943736485280932319023055820679748201010846749232650153123432669033228866506722546689218379712270471316603678615880190499865373798593894676503475065760507566183481296061009476021871903250831458295239598329977898245082887144638329173472241639845878553977"

包中还有一个 Data.Number.Symbolic 模块,但描述说“它主要用于调试”。

回答2

您似乎正在 Haskell 中寻找计算机代数系统 (CAS)。 尽管在 Haskell 包/模块的名称中对代数对象有如此多的引用,但我从未听说过 Haskell 中有一个通用且维护良好的 CA 系统(如 Python 中的 SymPy 或 Sage)。

但是,在维基百科的计算机代数系统列表中,我找到了对

多康。 代数域构造函数

它使用非标准许可证,但我敢说它仍然是开源的(尽管有重命名和归属要求)。 截至 2010 年 7 月, docon-2.11仍然使用 GHC 6.12.1 构建并运行演示/测试(我只需要在演示的一个文件中插入LANGUAGE FlexibleContexts pragma)。

DoCon 有很好的文档记录(手册的 362 页)。 它的手册是用源码打包在压缩包里的,所以为了方便,我把它单独放在网上:

DoCon 2.11 手册.ps

请仔细查看它是否适合您的需求。

回答3

查看 cyclotomic 包,它实现了对圆数的精确算术。 这些包括所有代数数(因此特别是 1+sqrt(3))并且关键操作(如相等)是可判定的。

它们不提供Ord实例(与复数不提供的原因相同),但是如果所有需要将它们用作查找表中的键,则可以实现非语义实例。 您可能想联系作者了解如何正确执行此操作,因为可能存在一些不明显的不变量(例如,可能需要小心coeffs图中的零)。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Haskell library like SymPy? [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 6 years ago. Improve this question I need to manipulate expressions like 1 + sqrt(3) and do basic arithmetic like addition, subtraction, and division. I'd like the result to be in some sort of canonical form so that it can be used as a key in a map. Turning 1 + sqrt(3) into a float is not feasible due to roundoff problems. I used SymPy for this task in Python. Is there an equivalent native library
  • 终端中的Python ASCII图(Python ASCII plots in terminal)
    问题 使用Octave,我能够在终端上绘制数组,例如,绘制具有函数x^2值的数组将在我的终端上显示以下输出: 10000 ++---------+-----------+----------+-----------+---------++ ++ + + + + ++ |+ : : : : +| |++ : : : : ++| | + : : : : + | | ++ : : : : ++ | 8000 ++.+..................................................+.++ | ++ : : : : ++ | | ++ : : : : ++ | | + : : : : + | | ++ : : : : ++ | | + : : : : + | 6000 ++....++..........................................++....++ | ++ : : : : ++ | | + : : : : + | | ++ : : : : ++ | | ++: : : :++ | 4000 ++........++..................................++........++ | + : : + | | ++ : : ++ | | :++ : : ++: | | : ++ : : ++
  • 是否有Python库列出素数?(Is there a Python library to list primes?)
    问题 是否有一个库函数可以枚举Python中的质数(按顺序)? 我发现了这个问题,是列出N以下所有素数的最快方法,但是我宁愿使用别人可靠的库也不愿自己动手。 我很乐意做import math; for n in math.primes: import math; for n in math.primes: 回答1 SymPy是另一种选择。 这是一个用于符号数学的Python库。 它提供了一些主要功能。 isprime(n) # Test if n is a prime number (True) or not (False). primerange(a, b) # Generate a list of all prime numbers in the range [a, b). randprime(a, b) # Return a random prime number in the range [a, b). primepi(n) # Return the number of prime numbers less than or equal to n. prime(nth) # Return the nth prime, with the primes indexed as prime(1) = 2. The nth prime is approximately n*log(n)
  • 如何在现实世界中使用函数式编程? [关闭](How can I use functional programming in the real world? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 6年前关闭。 改善这个问题 函数式语言之所以不错,是因为它们可以通过消除状态来避免错误,而且还可以为您轻松地自动并行化它们,而不必担心线程数。 但是,作为Win32开发人员,我可以对应用程序的某些dll使用Haskell吗? 如果我这样做了,那么我会自动获得真正的好处吗? 如果是这样,那么给我带来这个好处的是编译器? F#是否会并行化您跨多个内核编写的功能,并自动为您自动执行cpu? 您是否会看到任务管理器中的线程数增加? 基本上,我的问题是,我如何才能以一种实用的方式开始使用Haskell,如果这样做我会真的看到一些好处吗? 回答1 您所寻找的似乎是Real World Haskell这本书。 您可以在线免费阅读: http://book.realworldhaskell.org/ 回答2 F#不包含任何将功能传递给不同CPU或机器的魔术粉尘。 F#/ Haskell和其他功能编程语言的作用是使您更容易编写可以独立于创建线程或CPU进行处理的函数。 我觉得在这里链接到我参与的播客的链接不正确,似乎有些偏离,但是在《牧群法典》中,我们与Matt Podwysocki进行了交谈,我们提出了同样的问题,他给出了一些有趣的答案。 在该情节中
  • C++中的符号计算(symbolic computation in C++)
    问题 我需要在 C++ 中进行分析集成。 例如,我应该整合这样的表达式: exp[I(xy)] , I是一个虚数。 我怎样才能在 C++ 中做到这一点? 我试过 GiNaC,但它只能对多项式进行积分。 我也尝试过 SymbolicC++。 它可以集成sine 、 cosine或exp(x)和ln(x)等ln(x) ,但它不是很强大。 例如,它不能对x*ln(x)进行积分,而x*ln(x)可以通过使用 Mathematica 或分部积分很容易获得。 是否有任何其他工具或库可以进行符号计算,例如 C++ 中的分析集成? 回答1 如果您需要进行符号集成,那么您可能不会比在 mathematica 或 maxima 中运行它更快——它们已经用(类似)C++ 编写了。 因此,除非您的方程有一个非常具体的公式,您可以以 Mathematica 或 Maxima 无法利用的方式加以利用,否则您可能不走运——至少您不会从现成的图书馆。 如果您需要进行数值求解,您可能有理由编写自己的代码来提高速度。 (我知道我是为生成偏微分方程的数值解而做的)。 回答2 我所知道的其他进行符号计算的 C++ 库是 SymEngine (https://github.com/symengine/symengine) 食人鱼 (https://github.com/bluescarni/piranha)
  • 如何在Python中求解方程式? [关闭](How can I solve equations in Python? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 5年前关闭。 改善这个问题 假设我有一个方程: 2x + 6 = 12 使用代数,我们可以看到x = 3 。 如何使用Python编写可以解决x ? 我是编程的新手,我查看了eval()和exec()但我不知道如何使它们执行我想要的操作。 我不想使用外部库(例如SAGE),我只想在纯Python中执行此操作。 回答1 SymPy呢? 他们的求解器看起来像您所需要的。 如果您想自己构建库,请查看它们的源代码… 回答2 有两种方法可以解决此问题:数字方式和符号方式。 要用数字方式解决它,您必须首先将其编码为“可运行”功能-插入一个值,取出一个值。 例如, def my_function(x): return 2*x + 6 解析一个字符串来自动创建这样的函数是很有可能的。 假设您将2x + 6解析为一个列表[6, 2] (其中列表索引对应于x的幂-因此6 * x ^ 0 + 2 * x ^ 1)。 然后: def makePoly(arr): def fn(x): return sum(c*x**p for p,c in enumerate(arr)) return fn my_func = makePoly([6, 2]) my_func(3)
  • Python 是否存在素数相关函数的库?(Does a library for prime-related functions exist for Python?)
    问题 我刚刚实现了 Miller-Rabin-Test 和一个用于分解数字的简单函数。 两者都可以做得更好,至少米勒-拉宾测试是众所周知的。 那么你能告诉我是否存在实现这种常见素数函数的 Python 库,或者为什么不存在这样的库? 回答1 gmpy2 支持多种伪素数测试。 Miller-Rabin 测试可作为gmpy2.is_strong_prp() 。 gmpy2 还没有任何分解代码。 免责声明:我是 gmpy2 的维护者。 素性测试基于来自 http://sourceforge.net/projects/mpzprp/files/ 的代码 回答2 我刚刚从 SymPy 包中发现了isprime : import sympy print sympy.isprime(10) 输出: False 不要与prime混淆,它返回第 n 个素数: import sympy print sympy.prime(10) 输出: 29 回答3 我不认为标准库中存在这样一个专门用于质数函数的模块,但是当然有很多人编写了质数测试等。 is_prime()是一个面向多精度算术但具有多个素数函数(例如is_prime()和next_prime() )的库。 该文档也可用。 回答4 如果您正在寻找算法的实现,请查看 Rosetta Code。 该网站有许多 Python 实现。
  • Haskell 与 Prolog 比较 [关闭](Haskell vs. Prolog comparison [closed])
    问题 关闭。 这个问题是基于意见的。 它目前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑这篇文章用事实和引文来回答问题。 3年前关闭。 改进这个问题 Prolog 比 Haskell 更能解决什么样的问题? 这两种语言之间的主要区别是什么? 编辑 是否有可以模仿 Prolog 功能的 Haskell 库(一种逻辑求解器)? 回答1 Prolog 主要是一种针对逻辑问题的语言,特别是来自 AI 和语言领域的问题。 Haskell 更像是一种通用语言。 Prolog 是声明性(逻辑)语言,它使得在其中陈述逻辑问题变得更容易。 Haskell 是一种函数式语言,因此更适合于计算问题。 关于声明式编程的维基百科: 在计算机科学中,声明式编程是一种编程范式,它表达计算的逻辑而不描述其控制流。 它试图通过描述程序应该完成什么来最小化或消除副作用,而不是描述如何去完成它。 这与命令式编程相反,命令式编程需要对要运行的算法进行详细描述。 声明式编程将程序视为形式逻辑的理论,将计算视为该逻辑空间中的推论。 声明式编程最近变得特别有趣,因为它可以大大简化编写并行程序。 关于函数式编程的维基百科: 在计算机科学中,函数式编程是一种编程范式,它将计算视为对数学函数的评估,并避免了状态和可变数据。 它强调函数的应用,而命令式编程风格则强调状态的变化。 函数式编程起源于 lambda 演算,这是
  • Haskell 与现实世界中的过程式编程 [关闭](Haskell vs. procedural programming in the real world [closed])
    问题 关闭。 这个问题是基于意见的。 它目前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑这篇文章用事实和引文来回答问题。 7年前关闭。 改进这个问题 这些天我开始认真地进行函数式编程。 虽然我对 Haskell 及其似乎提供的可能性感到非常兴奋,但现在我也可以看到它需要我花一些时间来学习。 在关于如何学习 Haskell 的 SO 问题中,答案指出要真正“掌握”它需要几个月甚至几年的时间。 现在,我知道 C、PHP、一些面向对象的东西等等。并且被告知 Haskell 在“现实世界”中并不常用,我是否会更好地提高我所知道的常规语言的技能? Haskell 值得奋斗吗? 在这个关于为什么人们认为函数式编程会流行的问题中,结论似乎是函数式编程会“流行”。 但是过程式编程肯定会保持领先,对吗? 编辑:keparo 很好地澄清了我的问题:与过程语言相反,学习 Haskell 和函数式编程范式对我有价值吗? 回答1 Haskell 并不像人们喜欢学习的那么难。 Haskell 为您打开了一个您从未知道的新世界。 学习与任何其他语言一样有价值。 您可能找不到要求您进行 Haskell 编程的工作,但这是否真的意味着一种语言没有价值? Haskell 会教你很多新东西,它会告诉你如何用你/做/使用的语言更好地编程。 您可以在空闲时间用它来做自己的个人项目。 如果将“现实世界”定义为
  • C 有哪些绿色线程库可以匹配 Haskell 绿色线程的性能和易用性? [关闭](Which green threads libraries are available for C that can match the performance and ease of use of Haskell's green threads? [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 5年前关闭。 改进这个问题 在 Haskell 中编程时,我已经习惯于依赖 GHC 的 forkIO 来实现可移植的轻量级线程。 什么是 C 的等效库,可以提供相同的可扩展性和易用性? 具体来说,我需要至少以下两个函数的 C 等效项。 forkIO :: IO () -> IO ThreadId killThread :: ThreadId -> IO () 我假设对于我的应用程序,如果线程只打开阻塞操作而不是被强制挂起就足够了,因为所有线程都非常频繁地阻塞网络 IO 并且我只使用splice系统调用来要求 Linux 内核在套接字之间推送数据. 更新 本文有图表比较 GNU Pth 原线程 PM2包裹 结果有利于 Protothreads。 由于我没有使用过任何库,而且可能还有其他库,我很想听听使用/开发过此类库的任何人的意见。 回答1 libMill 可能就是您要搜索的内容:http://libmill.org/ 它以 Go-Lang 频道风格实现用户级线程。 它是由超级聪明的 Martin Sústrik 开发的,他是 ZeroMQ http://250bpm.com/ 的创建者。 所以一定是好的☺ 回答2
  • Haskell、Scala、Clojure,为高性能模式匹配和并发选择什么 [关闭](Haskell, Scala, Clojure, what to choose for high performance pattern matching and concurrency [closed])
    问题 就目前而言,这个问题不适合我们的问答形式。 我们希望答案得到事实、参考或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。 如果您认为此问题可以改进并可能重新打开,请访问帮助中心以获取指导。 8 年前关闭。 在阅读了大量关于 FP 在并发执行和性能方面的优势的博客和文章后,我最近开始研究 FP。 我对 FP 的需求在很大程度上受到我正在开发的应用程序的影响,我的应用程序是一个基于状态的数据注入器,进入另一个子系统,其中时间非常关键(接近每秒 200 万个事务)。 我有几个这样的子系统需要测试。 我正在认真考虑使用 FP 的并行性,并希望采用正确的方法,SO 上的许多帖子都讨论了 Scala、Haskell 和 Clojure wrt 语言结构、库和 JVM 支持的优缺点。 从语言的角度来看,我可以学习任何语言,只要它能帮助我取得成果。 某些帖子在模式匹配和语言简单性方面偏向于 Haskell,基于 JVM 的 FP lang 在使用现有 Java 库方面具有很大优势。 JaneStreet 是 OCAML 的重要支持者,但我真的不确定 OCAML 的开发人员支持和帮助论坛。 如果有人处理过如此大的数据,请分享您的经验。 回答1 你想要快速还是想要简单? 如果你想要快速,你应该使用 C++,即使你使用 FP 原则来帮助正确。 由于时序至关重要,因此对软(和硬
  • 哪些函数式编程语言具有生物信息学库? [关闭](Which functional programming languages have bioinformatics libraries? [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 7年前关闭。 改进这个问题 哪些函数式编程语言可以轻松获得生物信息学库? (不要包含多范式语言,例如 Ruby) 更新:也欢迎列出目前无法轻松访问生物信息学库的主要函数式编程语言。 回答1 你认为 R 是一种函数式语言而不是多范式语言吗? 如果是这样,R 拥有最大的生物信息学库集。 CRAN 中有很多模块,但 BioConductor 正是您要找的。 它是一个活跃的社区,大多数图书馆都发表在同行评审期刊上。 注意:我认为除了 perl、python 以及在 C/C++ 和 Java 中的一些小努力之外,没有其他编程语言具有良好的生物信息学库。 回答2 我已经开始了第一个严肃的 BioScala 项目,其中包括 ./doc 中的教程和设计理念。 此外,我正在 blog.thebird.nl 解释使用 Scala 进行生物信息学。 BioScala 正在进行中。 因为您可以同时使用 Scala 的 BioJava 和 BioRuby - 很快就会使用 BioLib - 您可以开始运行。 回答3 Open Bioinformatics Foundation 支持维护最好的、通用的、特定于语言的生物信息学库:BioPerl、Biopython、BioJava
  • Scala 解析器组合器与 Haskell 的 Parsec 相比如何? [关闭](How do Scala parser combinators compare to Haskell's Parsec? [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 5年前关闭。 改进这个问题 我读过 Haskell 解析器组合器(在 Parsec 中)可以解析上下文相关的语法。 对于 Scala 解析器组合器也是如此吗? 如果是这样,这就是“into”(又名“>>”)函数的用途吗? 与 Haskell 相比,Scala 的解析器组合器实现有哪些优点/缺点? 他们接受同一类语法吗? 是否更容易生成错误消息或使用其中一个来执行其他杂项有用的事情? Packrat 解析(在 Scala 2.8 中引入)如何适应这张图片? 是否有网页或其他资源可以显示一种语言实现中的不同运营商/功能/DSL-糖如何映射到另一种语言? 回答1 你有很多问题! 将 parsec(它只是众多 Haskell 解析器组合库之一)与 Scala 的 parsec 实现进行比较 这里没有人进行比较,因为 Scala 代码相当新,但请查看文档: http://hackage.haskell.org/package/parsec http://www.scala-lang.org/api/current/index.html#scala.util.parsing.combinator.Parsers 请注意,Haskell 有许多其他解析器组合器库
  • 从值数组评估sympy表达式(Evaluate sympy expression from an array of values)
    问题 我正在试验sympy,遇到了一个我无法解决的问题。 使用scipy,我可以编写一个表达式,并为x值数组求值,如下所示: import scipy xvals = scipy.arange(-100,100,0.1) f = lambda x: x**2 f(xvals) 使用sympy,我可以编写相同的表达式,如下所示: import sympy x = sympy.symbols('x') g = x**2 通过执行以下操作,我可以为单个值求值该表达式: g.evalf(subs={x:10}) 但是,我无法像我使用scipy一样,想出如何对x值数组进行求值的方法。 我该怎么做? 回答1 首先,目前SymPy不保证支持numpy数组,在这种情况下,这就是您想要的。 检查此错误报告http://code.google.com/p/sympy/issues/detail?id=537 其次,如果您想对许多值进行数值评估,SymPy并不是最佳选择(毕竟它是一个符号库)。 使用numpy和scipy。 但是,要进行数字评估的一个合理原因是,要推导要评估的表达式很困难,因此您可以在SymPy中将其派生,然后在NumPy / SciPy / C / Fortran中对其进行评估。 要将表达式转换为numpy,只需使用 from sympy.utilities.lambdify
  • 如何在 Sympy 中进行函数组合?(How to do function composition in Sympy?)
    问题 我想做类似h = f(g(x))事情,并能够区分h,例如h.diff(x) 。 对于像h = cos(x)这样的一个函数,这实际上是可能的,并且文档清楚地说明了这一点。 但是对于函数组合,就不是那么清楚了。 如果你已经这样做了,请给我看一个例子或将我链接到相关文档。 (如果 Sympy 无法做到这一点,您是否知道其他任何可以做到这一点的软件包,即使它是非 Python 的) 谢谢你。 回答1 在 sympy 中,函数组合似乎像您期望的那样工作: import sympy h = sympy.cos('x') g = sympy.sin(h) g Out[245]: sin(cos(x)) 或者如果你喜欢 from sympy.abc import x,y g = sympy.sin('y') f = g.subs({'y':h}) 然后你可以调用 diff 来获取你的导数。 g.diff() Out[246]: -sin(x)*cos(cos(x))
  • 可以进行功能GUI编程吗? [关闭](Is functional GUI programming possible? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我最近抓到了FP错误(试图学习Haskell),到目前为止我所看到的内容(一流的函数,惰性评估以及所有其他优点)给我留下了深刻的印象。 我还不是专家,但是我已经开始发现,对于基本算法而言,“按功能”推理比按需命令更容易(而且我很难回到必须去的地方)。 但是,当前FP似乎保持不变的一个领域是GUI编程。 Haskell方法似乎只是包装命令式GUI工具包(例如GTK +或wxWidgets),并使用“ do”块来模拟命令式样式。 我没有使用过F#,但是我的理解是,将OOP与.NET类一起使用时,它会执行类似的操作。 显然,这是有充分的理由的-当前的GUI编程都是关于IO和副作用的,因此在大多数当前的框架中纯函数式编程是不可能的。 我的问题是,是否可以使用功能性方法进行GUI编程? 我很难想象在实践中会是什么样子。 有谁知道尝试这种方法的任何框架(实验性框架或其他框架)(甚至是为功能性语言从头开始设计的任何框架)吗? 还是仅使用混合方法的解决方案,对GUI部件使用OOP,而对逻辑使用FP? (我只是出于好奇而问-我很想认为FP是“未来”,但GUI编程似乎需要填补很大的空白。) 回答1
  • python中好的几何库? [关闭](Good geometry library in python? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 5年前关闭。 改善这个问题 我正在寻找一个良好而完善的库,用于python中的几何处理和评估,例如: 评估2D和3D中两条线之间的交点(如果存在) 评估一个平面和一条线之间的相交点,或两个平面之间的相交线评估线与点之间的最小距离找到通过点的平面的正交线旋转,平移,镜像一组点找出由四个点定义的二面角 我有一本关于所有这些操作的简书,虽然可以实现,但不幸的是我没有时间,所以我会喜欢做这本书的图书馆。 大多数操作对于游戏目的都是有用的,因此我确信可以在游戏库中找到其中一些功能,但是我不希望不包含不需要的功能(例如图形)。 有什么建议 ? 谢谢 回答1 也许看看SymPy。 回答2 Shapely是流行的GEOS库周围的一个不错的python包装器。 回答3 我发现pyeuclid是一个很棒的简单通用欧几里得数学包。 尽管该库可能不完全包含您提到的问题,但其基础结构足以使您自己编写这些问题变得容易。 回答4 CGAL也具有Python绑定。 回答5 我真的想要这个问题的一个好答案,而上面的那些让我不满意。 但是,我只是遇到了pythonocc,看起来很不错,除了缺少好的文档,而且安装仍然有些麻烦(尚不兼容pypi)。 最近一次更新是4天前
  • Haskell 在现实世界中的用途是什么? [关闭](What is Haskell used for in the real world? [closed])
    问题 关闭。 这个问题是基于意见的。 它目前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑这篇文章用事实和引文来回答问题。 7年前关闭。 改进这个问题 有很多关于 Haskell 的炒作,然而,很难获得有关它在现实世界应用程序中如何使用的信息。 Haskell 最流行的项目/用途是什么,为什么它擅长解决这些问题? 回答1 这种语言有哪些常见用途? 快速的应用程序开发。 如果您想知道“为什么是 Haskell?”,那么您需要考虑函数式编程语言的优势(摘自 https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming): 函数式程序往往比它们的 ImperativeLanguage 对应程序简洁得多。 通常这会提高程序员的生产力 FP 鼓励快速原型设计。 因此,我认为这是极限程序员最好的软件设计范式……但我知道什么? FP在功能维度上是模块化的,而ObjectOrientedProgramming在不同组件的维度上是模块化的。 拥有蛋糕并吃掉它的能力。 想象一下,您有一个复杂的 OO 系统处理消息 - 每个组件可能会根据消息进行状态更改,然后将消息转发到它链接到的某些对象。 如果调用层次结构深处的某个对象认为消息有缺陷,那么能够轻松回滚每个更改不是太酷了吗? 拥有不同州的历史怎么样? 为您准备的许多内务管理任务
  • SymPy:如何根据其他表达式返回一个表达式?(SymPy: How to return an expression in terms of other expression(s)?)
    问题 我对SymPy相当陌生,可能有一个基本问题。 否则我可能只是在误解应该如何使用SymPy。 有没有一种方法可以创建一个不由原子表示,而是由其他表达式组合而成的表达式? 例子: >>> from sympy.physics.units import * >>> expr1 = m/s >>> expr2 = mile/hour >>> expr1 m/s >>> expr2 1397*m/(3125*s) >>> expr1.in_terms_of([mile,hour]) #in my dreams? 3125*mile/(1397*hour) >>> 附带说明:我可以找到完整SymPy文档的“官方” PDF(或其他可打印)版本吗? (我在工作中受到严苛的Internet使用限制,厌倦了周末在家工作。) 更新: 这就是我遵循Prelude的建议而最终得到的结果,但是这样感觉不太好,因此不太可能得到太多使用。 评论和对WTF的欢迎。 def in_terms_of(self, terms): expr2 = eval(str(self), physics.units.__dict__) converter = {} for term in terms: term_expr = physics.units.__dict__[term] coeff = term_expr.as
  • 现实世界中的Haskell编程(Real world Haskell programming [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 多年来,当我是当务之急的开发人员时,我从未有过学习函数式编程的冲动。 几个月前,我终于决定学习Haskell。 这是一种很酷的语言,但是我对如何将事件驱动的真实应用程序编程为这种语言感到困惑。 您知道有关它的好教程吗? 注意:当我说“真实应用程序”时,我并不是说真实世界,可投入生产的应用程序。 我只是说一个小示例应用程序,只是为了了解它。 我认为像Windows caculator的简化版本之类的东西会很棒,然后可能会更复杂一些。 回答1 当您说“真实世界”示例时,您大概是在考虑本质上是顺序的或有状态的问题,或者是需要大量I / O的问题,对吗? 那么,游戏呢? Frag是Quake的克隆版本,用于本科毕业论文(Functional Programming and 3D Games,Mun Hon Cheong,2005年)。 这是一个正在运行的视频。 超级莫纳奥兄弟( Super Monao Bros. )(以前称为超级纳里奥兄弟( Super Nario Bros. ))很好,您可以弄清楚它是哪个游戏的克隆版。 (这是作者的英语博客)。 《 Purely Functional Retrogames