标签: ocaml

滥用代数数据类型的代数 - 为什么这样做?

代数数据类型的"代数"表达式对于具有数学背景的人来说非常具有启发性.让我试着解释一下我的意思.

定义了基本类型

  • 产品
  • 联盟 +
  • 独生子 X
  • 单元 1

并使用简写X•X2XX+X等等,我们就可以定义如链表代数表达式

data List a = Nil | Cons a (List a)L = 1 + X • L

和二叉树:

data Tree a = Nil | Branch a (Tree a) (Tree a)T = 1 + X • T²

现在,我作为数学家的第一直觉是坚持这些表达方式,并试图解决LT.我可以通过重复替换来做到这一点,但似乎更容易滥用符号,并假装我可以随意重新排列.例如,对于链接列表:

L = 1 + X • L

(1 - X) • L = 1

L = 1 …

ocaml haskell functional-programming algebraic-data-types miranda

277
推荐指数
7
解决办法
1万
查看次数

在函数式编程中,什么是函子?

在阅读有关函数式编程的各种文章时,我偶然遇到过"Functor"这个术语,但作者通常认为读者已经理解了这个术语.在网上浏览提供了过多的技术描述(参见维基百科文章)或令人难以置信的模糊描述(请参阅本ocaml教程网站上的Functors部分).

有人可以友好地定义术语,解释它的用法,并提供一个如何创建和使用Functors的例子吗?

编辑:虽然我对这个术语背后的理论感兴趣,但我对这个理论的兴趣不如我在实现和实际使用这个概念.

编辑2:看起来有一些交叉的术语:我特别指的是函数式编程的函数,而不是C++的函数对象.

ocaml functional-programming functor

219
推荐指数
12
解决办法
3万
查看次数

F#更改为OCaml

F#派生自OCaml,但缺少或添加了哪些主要项目?具体来说,我很好奇可用于学习OCaml的资源是否对想要学习F#的人有用.

f# ocaml functor

124
推荐指数
4
解决办法
3万
查看次数

为什么OCaml中的int只有31位?

在其他任何地方都没见过这个"功能".我知道第32位用于垃圾收集.但是为什么它只是针对整数而不是其他基本类型呢?

ocaml integer

113
推荐指数
4
解决办法
3万
查看次数

97
推荐指数
2
解决办法
2万
查看次数

在纯函数式语言中,是否有算法来获得反函数?

在像Haskell这样的纯函数式语言中,是否存在一个算法来获取函数的逆,当它是双射的时(编辑)?是否有一种特定的方式来编程你的功能呢?

ocaml haskell functional-programming clojure

97
推荐指数
9
解决办法
1万
查看次数

为什么Ocaml/F#中的函数默认不递归?

为什么F#中的函数和Ocaml(可能还有其他语言)默认不是递归的?

换句话说,为什么语言设计者决定明确地让你输入如下rec声明是一个好主意:

let rec foo ... = ...
Run Code Online (Sandbox Code Playgroud)

并且默认情况下不提供函数递归功能?为什么需要显式rec构造?

recursion f# ocaml

91
推荐指数
4
解决办法
8259
查看次数

为什么用函数式语言编写编译器更容易?

我一直在考虑这个问题,但实际上无法在Google上找到答案以及Stackoverflow上的类似问题.如果有重复,我很抱歉.

许多人似乎都说,在函数式语言(如OCaml和Haskell)中编写编译器和其他语言工具比使用命令式语言编写它们更有效,更容易.

这是真的?如果是这样的话 - 为什么用函数式语言而不是像C这样的命令式语言来编写它们是如此高效和容易?另外 - 在一些函数式语言中,语言工具不是像C这样的低级语言吗?

compiler-construction ocaml haskell functional-programming

85
推荐指数
6
解决办法
1万
查看次数

在OCaml中有!=有意义吗?

它似乎是某些类型的等效比较,但不是字符串.

# 3 != 3;;
- : bool = false
# 3 != 2;;
- : bool = true
Run Code Online (Sandbox Code Playgroud)

这是预期的.

# "odp" = "odp";;
- : bool = true
# "odp" != "odp";;
- : bool = true
# "odp" <> "odp";;
- : bool = false
Run Code Online (Sandbox Code Playgroud)

为什么"odp" != "odp"评估true?它到底在做什么?它不应该生成类型错误?

ocaml

62
推荐指数
3
解决办法
2万
查看次数

在OCaml或Haskell中进行机器学习?

我希望在一个新项目中使用Haskell或OCaml,因为R太慢了.我需要能够使用支持vectory机器,理想情况下将每个执行分开并行运行.我想使用一种函数式语言,我觉得这两者在性能和优雅方面都是最好的(我喜欢Clojure,但它在短期测试中并不那么快).我倾向于OCaml,因为似乎有更多支持与其他语言的集成,所以从长远来看它可能更适合(例如OCaml-R).

有没有人知道在Haskell或OCaml中进行这种分析或代码示例的好教程?

ocaml haskell machine-learning

62
推荐指数
8
解决办法
3万
查看次数