标签: ocaml

为什么对冲基金和金融服务经常使用OCaml?

谈到一些quants/hedgies,我得出的结论是,他们中的很多人似乎都在使用自制语言或OCaml执行许多任务.许多人无法回答的原因是.

我当然可以理解他们为什么不想在大多数情况下使用C++,但为什么OCaml与其他脚本语言(如Python,Ruby等)相比更适合这些用途?

ocaml programming-languages quantitative-finance

23
推荐指数
5
解决办法
1万
查看次数

功能广度优先搜索

功能深度优先搜索在有向无环图中很可爱.

然而,在带循环的图中,我们如何避免无限递归?在程序语言中,我会在我点击它时标记节点,但是让我说我​​不能这样做.

访问节点列表是可能的,但速度很慢,因为使用一个会导致在重复之前对该列表进行线性搜索.比这里的列表更好的数据结构显然会有所帮助,但这不是游戏的目的,因为我在ML中编码 - 列表是王道,还有其他任何我必须自己写的东西.

这个问题有巧妙的方法吗?或者我是否必须处理访问列表或上帝禁止,可变状态?

python ocaml haskell functional-programming sml

23
推荐指数
3
解决办法
3933
查看次数

如何在OCaml解释器shell中重复最后一个命令

我一直在尝试OCaml.有时它只是使用解释器shell测试一些代码更快,但是当我按下"向上"键时它不会显示最后一个命令.

当我错过输入某些东西或希望看到会产生一点变化时会很痛苦.

任何人都知道是否还有另一把钥匙?

谢谢,

interpreter ocaml

22
推荐指数
2
解决办法
4760
查看次数

尾递归与前向递归

有人可以给我这两种递归和示例(特别是在OCaml中)之间的区别吗?

recursion ocaml functional-programming

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

OCaml中的正则表达式

我想用正则表达式 OCaml中,似乎Str模块提供这些功能.

所以我尝试了一个简单的程序:

open Str
let regx = regexp "."
Run Code Online (Sandbox Code Playgroud)

但它给了我以下错误

文件"lol.ml",第1行,字符0-1:错误:链接lol.cmo时出错:引用未定义的全局`Str'

好像模块不存在但如果我删除open Str它说这regexp是一个未绑定的值.

我不知道它是什么类型的问题,Str应该是一个标准模块(根据http://caml.inria.fr/pub/docs/old-311/libref/Str.html)所以我很无能为力.我认为唯一的想法是签名(mli)存在但实现(ml)不存在.

Objective Caml version 3.11.0按照ocaml工具运行.

任何人都可以帮我解决这个问题吗?提前致谢

regex linker ocaml module

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

寻找OCaml IDE

我喜欢F#,但有时候我需要一些轻量级和跨平台的东西,而且没有.NET.我试过多次使用OCamL,但似乎我无法启动它.

  1. 安装了IDEA,添加了OCamL插件 - >不起作用
  2. 安装eclipse ODT插件 - >无法启动甚至配置OCamL编译器 - 太复杂了
  3. 甚至在很久以前就尝试过NetBeans插件,但即使不能处理它.

所以,现在,我正在从命令shell和不同的光编辑器使用ocamlc -o"main.exe""main.ml".我不使用Vim或Emacs,我使用的是nano,我习惯使用全功能的IDE.

我找到了各种文档(这对我来说是最好的启动http://caml.inria.fr/pub/docs/oreilly-book/html/index.html)但是在寻找一些特定的东西时仍然会让人感到困惑相似的sqlite访问.发现这个:http://neugierig.org/software/ocaml/sqlite/有奇怪的api注释,没有例子.我发现的有关IDE使用的所有文档都已过时或无效.

添加子问题:有些人告诉我"不要使用OCamL,对于拥有低库支持的学生来说,这是一种死语言,似乎就像死了一样,使用python或ruby代替".但我喜欢OCamL的美丽.我想尝试一下.告诉我今天使用OCamL生产代码是否正常?

谢谢.

ide ocaml typerex

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

OCaml内部:例外

我很想知道如何在OCaml运行时处理异常以使它们如此轻量级.他们使用setjmp/longjmp还是在每个函数中返回一个特殊值,然后传播它?

在我看来,longjmp会给系统带来一点压力,但只有当引发异常时,检查每个函数的返回值才需要在调用函数后检查每个值和每个值,这在我看来会很多检查和跳跃,似乎表现最差.

通过查看OCaml如何与C接口(http://caml.inria.fr/pub/docs/manual-ocaml/manual032.html#toc142),并查看callback.h,似乎通过使用标记异常对象的内存对齐(#define Is_exception_result(v)(((v)&3)== 2)).这似乎表明它的实现不使用longjmp并在每次函数调用后检查每个函数结果.是吗?或者C函数已经尝试捕获任何异常,然后将其转换为这种格式?

谢谢!

compiler-construction ocaml exception internals longjmp

21
推荐指数
1
解决办法
1952
查看次数

什么是类型量词?

许多静态类型语言具有参数多态性.例如在C#中,可以定义:

T Foo<T>(T x){ return x; }
Run Code Online (Sandbox Code Playgroud)

在呼叫站点中,您可以:

int y = Foo<int>(3);
Run Code Online (Sandbox Code Playgroud)

这些类型有时也像这样写:

Foo :: forall T. T -> T
Run Code Online (Sandbox Code Playgroud)

我听过有人说"forall就像类型级别的lambda抽象".所以Foo是一个函数,它接受一个类型(例如int),并产生一个值(例如int - > int类型的函数).许多语言推断出类型参数,因此您可以编写Foo(3)而不是Foo<int>(3).

假设我们有一个f类型的对象forall T. T -> T.我们可以用这个对象做的是首先通过Q写入传递它f<Q>.然后我们得到一个类型的值Q -> Q.但是,某些f是无效的.例如f:

f<int> = (x => x+1)
f<T> = (x => x)
Run Code Online (Sandbox Code Playgroud)

因此,如果我们"调用",f<int>那么我们会返回一个带有类型的值,int -> int一般来说,如果我们"调用",f<Q>那么我们会返回一个带有类型的值Q -> Q,这样就很好了.但是,人们普遍认为这f不是一种有效的类型forall T. T -> T,因为它根据您传递的类型做了 …

ocaml haskell types existential-type parametric-polymorphism

21
推荐指数
3
解决办法
1543
查看次数

如何在交互式Ocaml中获取类型信息?

我正在使用版本4的Ocaml.当我以交互方式定义某种类型时,解释器会在此之后立即打印出该类型的字符串表示:

# type foo = Yes | No;;         <-- This is what I entered
type foo = Yes | No             <-- This is what interpreter bounced
Run Code Online (Sandbox Code Playgroud)

但是在我输入更多定义之后,有时我想再次看到该类型的文本表示.

在Haskell中,我可以输入":t foo".

我怎么能在Ocaml中这样做?

ocaml

21
推荐指数
2
解决办法
3895
查看次数

如何在OCaml的顶层加载ml文件,就像在SML/NJ中`use mine.sml`一样?

SMLrepl,你可以只输入use whatever.sml和里面所有的东西加载.smlrepl.

我怎么能在OCaml中做到这一点?

ocaml functional-programming sml

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