小编D.F*_*F.F的帖子

比较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
查看次数

vscode中的反向滚动(自然)

我已将笔记本电脑上的触摸板滚动设置为倒置(自然)。它适用于任何地方(pdf、浏览器等),但在 vscode 中,它坚持正常滚动。通过 vscode 的设置文件没有显示适当的条目。

系统:Ubuntu 16.04 64

visual-studio-code

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

是一个"可选的"管道操作员惯用语F#

我喜欢使用管道运算符'|>'.但是,当混合使用返回'Option-Typed-values'的函数返回'simple'值的函数时,事情会变得有点混乱,例如:

// foo: int -> int*int
// bar: int*int -> bool
let f (x: string) = x |> int |> foo |> bar
Run Code Online (Sandbox Code Playgroud)

工作,但它可能会抛出'System.FormatException:...'

现在假设我想通过使函数'int'给出一个可选的结果来解决这个问题:

let intOption x = 
    match System.Int32.TryParse x with
    | (true, x) -> Some x
    | (false,_) -> None
Run Code Online (Sandbox Code Playgroud)

现在唯一的问题当然是功能

let g x = x |> intOption |> foo |> bar
Run Code Online (Sandbox Code Playgroud)

由于输入错误,将无法编译.好的,只需定义一个'可选的'管道:

let ( |= ) x f = 
   match x with
   | Some y -> Some (f y)
   | None -> None
Run Code Online (Sandbox Code Playgroud)

现在我可以简单地定义:

let f …
Run Code Online (Sandbox Code Playgroud)

f# pipeline idiomatic

6
推荐指数
3
解决办法
581
查看次数

模式匹配中的部分解构(F#)

按照观察的最小例子(那种惊讶我):

type Vector = V of float*float

// complete unfolding of type is OK
let projX (V (a,_)) = a

// also works
let projX' x =
   match x with
   | V (a, _) -> a

// BUT:
// partial unfolding is not Ok 
let projX'' (V x) = fst x

// consequently also doesn't work 
let projX''' x =
   match x with
   | V y -> fst y
Run Code Online (Sandbox Code Playgroud)

是什么原因导致无法与部分解构的类型相匹配?

一些部分解构似乎没问题:

// Works
let f (x,y) = fst y
Run Code Online (Sandbox Code Playgroud)

编辑:好的,我现在理解所描述行为的"技术"原因(感谢您的回答和评论).但是,我认为语言明智,与其他语言相比,这种行为感觉有点"不自然": …

f# constructor pattern-matching

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