小编obj*_*gic的帖子

比较F#和OCaml

我大致知道F#和OCaml在"特征"方面的差异(例如,仿函数,camlp4,度量单位......).

我想知道以下内容:关于不包含所述功能的代码,F#和OCaml之间的编码风格(除了命名约定之外)是否存在差异?换句话说,如果某些(惯用的)F#代码能够以直接的方式(可能是简单的)转换为OCaml,那么这种转换是否必然导致惯用的Ocaml?

编辑:从Guy Coder提供的链接我猜想一些"惯用的"OCaml代码可能不会直接转换为"惯用的"F#代码,因为F#中的异常要慢很多(并且在OCaml中使用得更广泛).另一个方向呢?一些F#ish OCaml代码会引发一种反应:"不要这样做XX,OCaml做XX的方式是异常而不是XY ......"

通常,与F#中的典型用法相比,在OCaml中使用异常有何不同.是否存在在两种语言中使用不同的其他结构(例如,由于一种语言中的性能损失)?

f# ocaml

15
推荐指数
1
解决办法
5150
查看次数

使OCaml函数多态用于int列表和浮点列表

有没有办法在OCaml中创建一个多态加法函数,对于整数和浮点数同样有效?所以例如,如果我有一个像这样的功能:

partialsums [1; 2; 3; 4; 5]我应该得到[1; 3; 6; 10; 15]但是这个函数不起作用,[1.; 2.; 3.; 4.; 5.]因为在OCaml int和浮点数绝对不能混合.但是如果我希望我的函数同样适用于int列表和浮点列表呢?是否存在int和float是子类型的一般类型?如果是这样,它是什么?我在这一点上有点失落.谢谢您的帮助?

polymorphism ocaml

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

OCaml 列表匹配模式

所以我正在编写一个简单的方法来总结列表中前 3 个或更少的整数,但我对匹配模式感到困惑。
我目前有

let sums l = match l with
    | [] -> 0
    | (h1::h2::h3::_) -> h1+h2+h3
    | [h1;h2;h3] -> h1+h2+h3
    | [h1;h2] -> h1+h2
    | [h1] -> h1
Run Code Online (Sandbox Code Playgroud)

这是否涵盖了所有情况?另外,为什么对于 3 个或更多元素我不能写类似 [h1;h2;h3;_] 的东西?
抱歉,如果这些问题看起来太简单,我刚刚开始学习 OCaml,我在网上找不到类似的东西。

ocaml pattern-matching

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

Python 3.5的语法是LL(1)吗?

我看到http://matt.might.net/teaching/compilers/spring-2015/说Python 3.4是LL(1)

Python 3.5的语法仍然是LL(1)所以可以写一个递归下降解析器吗?

python compiler-construction grammar parsing

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

OCaml + Menhir:如何像元组模式一样解析 OCaml?

我是menhir的初学者。我想知道如何用我自己的语言像元组模式一样解析 OCaml,这与 OCaml 非常相似。

例如,在表达式 中let a,b,c = ...a, b, c应该像 一样解析Tuple (Var "a", Var "b", Var "c")

但是,在解析器的以下定义中,上面的示例被解析为Tuple (Tuple (Var "a", Var "b"), Var "c"). 我想知道如何修复以下定义来解析像 ocaml 这样的模式。

我已经检查了 OCaml 的 parser.mly,但我不确定如何实现这一点。我认为我的定义与 OCaml 的定义类似......他们使用了什么魔法?

%token LPAREN
%token RPAREN
%token EOF
%token COMMA
%left COMMA
%token <string> LIDENT
%token UNDERBAR
%nonassoc below_COMMA

%start <Token.token> toplevel
%%

toplevel:
| p = pattern EOF { p }

pattern:
| p = simple_pattern        { p …
Run Code Online (Sandbox Code Playgroud)

ocaml menhir

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

在OCaml中编译和运行

我是OCaml的新手,我想知道如何将ocaml代码写入文件,然后编译它以便随时运行它.现在我通过键入ocamlmac或linux终端并编写代码来使用OCaml ,但是当我完成并关闭软件后,我将失去所有的工作.

ocaml

5
推荐指数
2
解决办法
3626
查看次数

将OCaml代码转换为F#

我正在将一些OCaml代码转换为具有OCaml问题的F#,该问题let...and...仅通过使用递归函数存在于F#中.我有给定的OCaml代码:

let matches s = let chars = explode s in fun c -> mem c chars
let space = matches " \t\n\r"
and punctuiation = matches "() [] {},"
and symbolic = matches "~'!@#$%^&*-+=|\\:;<>.?/"
and numeric = matches "0123456789"
and alphanumeric = matches "abcdefghijklmopqrstuvwxyz_'ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Run Code Online (Sandbox Code Playgroud)

我想在这两种方法中使用它:

let rec lexwhile prop inp = match inp with
c::cs when prop c -> let tok,rest = lexwhile prop cs in c+tok,rest
|_->"",inp

let rec lex inp = 
match snd(lexwhile space inp)with …
Run Code Online (Sandbox Code Playgroud)

f# ocaml

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

OCaml中List.iter和List.map函数之间的区别

我遇到了这个功能:List.map.我所理解的是List.map将函数和列表作为参数并转换列表中的每个元素.

List.iter 做类似的事情(也许?),参考下面的例子:

# let f elem =
Printf.printf "I'm looking at element %d now\n" elem in
List.iter f my_list;;
I'm looking at element 1 now
I'm looking at element 2 now
I'm looking at element 3 now
I'm looking at element 4 now
I'm looking at element 5 now
I'm looking at element 6 now
I'm looking at element 7 now
I'm looking at element 8 now
I'm looking at element 9 now
I'm looking …
Run Code Online (Sandbox Code Playgroud)

ocaml functional-programming

5
推荐指数
2
解决办法
5027
查看次数

函数在OCaml中以相反的顺序返回列表

我想从文件中读取一些数字,将它们带到列表中,最后在屏幕上显示它们.数字.txt目前已2 3 5 7 11作为输出我得到11 7 5 3 2 - : unit = ()

为什么会这样?

let rec int_list_from_sb sb n = 
match n with 
| 0 -> [];
| _ -> (bscanf sb " %d" (fun a -> a))::(int_list_from_sb sb (n - 1));;

let file_name = open_in "numbers.txt" in 
let sb = Scanning.from_channel file_name in 
let int_list = int_list_from_sb sb 5 in
List.iter (fun a -> print_int a) int_list;;
Run Code Online (Sandbox Code Playgroud)

ocaml

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

OCaml语法:什么类型'是什么意思?

这是关于OCaml中的类型定义,我发现以下语法令人费解:

type 'a t
Run Code Online (Sandbox Code Playgroud)

简单的英语是什么意思?

ocaml

5
推荐指数
2
解决办法
634
查看次数