标签: ocaml

你能解释一下OCaml仿函数吗?

可能重复:
在功能编程中,什么是仿函数?

我对OCaml了解不多,我已经研究了F#一段时间并且非常了解它.

他们说F#错过了函数模型,它存在于OCaml中.我试图弄清楚究竟是什么算子,但维基百科和教程对我没什么帮助.

你能为我阐明这个谜吗?提前致谢 :)

编辑:

对于帮助过我的每个人,我都明白了这一点.您可以将问题完全复制为:在函数式编程中,什么是仿函数?

f# ocaml functor

17
推荐指数
2
解决办法
8499
查看次数

OCaml 3.12中的第一类模块:它们使更容易(或可能)的东西变成什么样?

我听说OCaml 3.12中有"头等舱模块".它们有什么优势?什么孩子的事情会更容易?他们试图解决什么问题?一个简单的例子就足够了.

ocaml

17
推荐指数
2
解决办法
3060
查看次数

函数式编程语言内省

我正在草拟一些设计(函数的机器学习),它最好是想要一种函数式编程语言,还有内省,特别是以一些易于处理的格式检查程序自己的代码的能力,最好还有获取机器的能力.生成的代码是在运行时编译的,我想知道什么是编写它的最佳语言.Lisp当然具有强大的内省功能,但静态类型语言也有优势; 我正在考虑的是:

F# - .Net平台在这里有一个很好的故事,你可以在运行时读取字节码,也可以发出字节码并进行编译; 我假设从F#访问这些设施没有问题.

Haskell,Ocaml - 通过字节码或解析树,它们有类似的功能吗?

还有其他语言我还应该关注吗?

f# ocaml haskell functional-programming introspection

17
推荐指数
4
解决办法
2485
查看次数

如何从OCaml中的文本文件中读取行?

这就是我到目前为止所拥有的.这不就是你需要的吗?我一直收到错误"错误:未绑定模块标准"

let r file =
    let chan = open_in file in
    Std.input_list (chan)
Run Code Online (Sandbox Code Playgroud)

ocaml

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

如何进行合成错误检查以使用OCaml?

合成对我来说一般(例如,如果我编辑C/C++文件然后我得到语法错误通知),但我无法让它显示语法错误OCaml.

我的OCaml安装似乎没问题,并且Syntastic ocaml.vim文件头中提到的二进制文件在我的路径中.

有任何想法吗?

vim ocaml syntastic

17
推荐指数
1
解决办法
1234
查看次数

“a.”和“type a.”有什么区别以及何时使用它们?

OCaml 对于多态类型注释有几种不同的语法:

\n
let f :         \'a -> \'a = \xe2\x80\xa6 (* Isn\xe2\x80\x99t this one already polymorphic? (answer: NO) *)\nlet f : \'a.     \'a -> \'a = \xe2\x80\xa6\nlet f : type a.  a ->  a = \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

当使用奇特的代数数据类型(通常是 GADT)时,我们经常会看到它们,它们似乎是必要的。

\n

这些语法有什么区别?何时以及为何必须使用每一项?

\n

polymorphism ocaml type-inference algebraic-data-types

17
推荐指数
3
解决办法
1726
查看次数

程序员程序员的功能代码片段列表?

有时我仍然试图将过程代码转换为功能代码.

是否有一个功能成语/片段列表映射到程序习语/片段?

编辑

由于似乎没有这些片段的集中式网站,我将其转变为社区维基.请在此粘贴任何程序 - >功能片段.

f# ocaml haskell functional-programming code-snippets

16
推荐指数
1
解决办法
1308
查看次数

将具有有效功能空间(如ML)的语言核心嵌入Haskell有多实用?

正如Moggi 20年前提出的->那样,ML等语言的有效函数空间可以分解为标准的总函数空间=>加上强大的monad T来捕获效果.

A -> B 分解为 A => (T B)

现在,Haskell支持monad,包括一个看起来足以用于ML中的效果的IO monad,它有一个包含=>(但也包括部分函数)的函数空间.因此,我们应该能够通过这种分解将相当大的ML片段转换为Haskell.从理论上讲,我觉得这很有效.

我的问题是这样的嵌入是否可行:是否有可能设计一个Haskell库,允许在Haskell中以不远离ML的方式编程?如果是这样,性能将如何?

我对"实用"的标准是,具有广泛的使用效果现有ML代码可以通过嵌入相对容易地转录成Haskell中,包括涉及高阶函数复杂的案件.

为了具体化,我自己尝试通过嵌入进行这样的转录.主要功能是转录一些简单的ML代码,强制生成5个不同的变量名.而不是直接使用的分解,让他们评估他们的论点我的版本提升功能-之前的定义,main是一个小型图书馆,包括解除原语.这项工作没问题,但有些方面并不完全令人满意.

  1. 通过将值注入到计算中会有太多的语法噪音val.具有功能(如未提升的版本rdV),将有助于这一点,在这些要求中定义的成本.
  2. 非值定义,如varNum需要monadic绑定通过<-a do.然后,这会强制任何依赖于它们的定义也在同一个do表达式中.
  3. 那时似乎整个程序可能最终成为一个巨大的do表达.这是ML程序是如何经常考虑,但在Haskell它不是那么很好的支持-例如,你不得不使用case,而不是公式.
  4. 我想尽管穿过IO monad,但仍会有一些懒惰.鉴于ML计划将被设计用于严格评估,可能应该删除懒惰.我不确定最好的方法是做什么.

那么,有关改进这一点的建议,或者使用相同分解的更好方法,甚至是使用反映ML的样式在Haskell中实现相同的编程目标的完全不同的方法?(并不是我不喜欢Haskell的风格,只是因为我希望能够轻松地映射现有的ML代码.)

import Data.IORef
import Control.Monad

val :: Monad m => a -> m a
val = return

ref = join . liftM newIORef
rdV = readIORef                                    -- Unlifted, hence takes a value
(!=) r x = …
Run Code Online (Sandbox Code Playgroud)

monads f# ocaml haskell effects

16
推荐指数
1
解决办法
465
查看次数

在OCaml中将float转换为int

我怎么能把浮点数转换为OCaml中的整数?

我知道如何从int获取一个浮点数,但似乎没有一种简单的方法可以从浮点数中获取一个int.

ocaml

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

接口(Ocaml)的假设不一致

我突然开始得到这个错误.我不知道如何诊断或修复它.我是否应该通过grep bar.ml检查每个Big_int函数以防止签名Big_int.mli

File "foo.ml", line 1, characters 0-1:
Error: The files /home/bar.cmi
       and /usr/lib/ocaml/big_int.cmi make inconsistent assumptions
       over interface Big_int
Run Code Online (Sandbox Code Playgroud)

ocaml compiler-errors

16
推荐指数
2
解决办法
6230
查看次数