代码之家  ›  专栏  ›  技术社区  ›  Platinum Azure

函数规划和方程求解器

  •  3
  • Platinum Azure  · 技术社区  · 17 年前

    就像个人实验一样,为了更好地学习编程和形式语言理论之类的知识,我试图编写一种语言,它基本上采用了一系列方程,并或多或少地自动或启发式地解决未知问题。我试着用C语言写一个翻译。

    不过,所有这些都不是很重要…更重要的是,我在过去的几天里发现了函数式编程(我的意思是我读了维基百科的条目和一个简短的haskell教程),它似乎处理的事情与我想做的非常相似。

    我想我想知道的是,有没有其他语言我应该研究,或任何非功能性的语言,有库或程序尝试做类似的事情,这样我可以更好地了解我要做什么?

    另外,有没有什么好的参考资料可以用来写口译员等?

    谢谢。

    另外,我知道我可以也应该使用谷歌。我是,站在一边。最重要的是,我在寻找一个集体的“第二意见”什么是好的,什么是人们以前使用过。另外,我也在尝试更好地了解社区,因为我是新来的。感谢您的耐心等待:—)

    2 回复  |  直到 17 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    免责声明:我没有认真探讨这个领域,但希望这篇小文章可能对你有用-并等待从其他人那里看到更多的答案。

    我认为一个问题中有多个问题:

    1)方程求解器。

    如果你的意思是象征性地“解决未知”——这是一大堆你即将开始的工作,imho:—)你将要开始创建一个 computer algebra system .

    Term rewriting 本身就是一个相当大的话题。如果您对这一级别的操作特别感兴趣,那么C可能不是最容易使用的——对于该任务,您可能更容易使用Lisp。

    值得注意的是,并不是每一组方程都会有一个解,并且“仅仅”弄清楚它是否有一个解,这本身就是一项艰巨的任务。

    另一方面,如果你想用数值方法解这些方程,比如 this 可能很有趣。

    2)一般功能编程。

    哈斯克尔是一门很好的语言(尽管我还是一个非常初学者——我认为它可能是最优雅的语言之一)。OCAML可能是另一条探索之路。当然,还有计划。如果您处理的是Web编程,那么具有直接实际意义的语言可能是XSLT。

    当然,您可以很容易地用Ruby和Python编写函数样式。观察学习新语言如何改变“主要”语言中的编程模式是非常有趣的。所以,不管语言理论与否——你接触的语言越多越好。

    3)写口译员等。

    我怀疑,考虑到这个问题的味道,最有趣的实际应用程序不是解释器,而是编译器中的优化代码。为此 Dragon book 和 MIT computer language engineering course 在我看来,从一开始就有用。然后你可以拿一份 TCC 玩它。如果你想修补一些不那么传统的东西,看看 potion -一个非常有趣的语言实验,将x86机器代码作为其“字节码”(因此,x86机器上的性能相当惊人)。

    This question on SO 实际上引用了上面(3)中的大部分链接,还有很多。

        2
  •  2
  •   Conal    17 年前

    正如安德鲁所建议的,你所描述的核心是“计算机算法系统”,更普遍的是“术语重写系统”。读这两个方面的书应该能让你有方向感。

    而且,是的,我希望您会发现函数式编程是一种非常适合的范例。也许逻辑编程也是如此。

    我的预感是,你关于口译员的问题是一派胡言,结果是 Greenspun's Tenth Rule ,这就是

    任何足够复杂的C或Fortran程序都包含一个特殊的、非正式指定的、充满错误的、缓慢实现一半公共Lisp的程序。

    在这里,您可以将“common lisp”替换为“函数式编程语言”。

    换句话说,如果您选择并使用有意识地设计的函数式编程语言(对于您的计算机代数系统),您就不必无意识地(而且很糟糕地)创建一种语言。

    我个人最喜欢的功能语言是haskell。对于新手来说,haskell的优势在于让你承认——通过静态输入——当你仍然需要编程时。