相关疑难解决方法(0)

F# - 我应该在有或没有#light的情况下学习吗?

我正在学习F#,到目前为止我很享受.几乎所有在线示例都使用轻量级语法(#light); 但是,在大多数情况下,也会对所述示例进行评论.

使用#light启用还是禁用来学习F#会更好吗?我打算最终学习它没有开启,但我很好奇是否在开始学习它或者在我更熟悉核心语言之后应用它.

f#

31
推荐指数
3
解决办法
7690
查看次数

在这个例子中,`in`关键字的含义是什么(F#)

我一直试图了解F#的各个部分(我来自更多的C#背景),解析器对我很感兴趣,所以我跳过关于F#解析器组合器的博客文章:

http://santialbo.com/blog/2013/03/24/introduction-to-parser-combinators

其中一个样本是:

/// If the stream starts with c, returns Success, otherwise returns Failure
let CharParser (c: char) : Parser<char> =
    let p stream =
        match stream with
        | x::xs when x = c -> Success(x, xs)
        | _ -> Failure
    in p               //what does this mean?
Run Code Online (Sandbox Code Playgroud)

但是,这个代码让我感到困惑的一件事就是in p声明.我in在MSDN文档中查找了关键字:

http://msdn.microsoft.com/en-us/library/dd233249.aspx

我也发现了这个早先的问题:

F#中关键字"in"的含义

这些似乎都没有相同的用法.唯一合适的是这是一个流水线构造.

f# keyword

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

F#让绑定模式

这个问题在stackoverflow中并不新鲜,但我无法理解let与模式和in关键字绑定的行为.我的教科书更喜欢不常见的函数定义格式:

let foo = fun x -> let f = (fun x y -> x +y ) in f x    
Run Code Online (Sandbox Code Playgroud)

所以我翻译了#light语法:

let foo x =
    let f y =
        x + y
    f x
Run Code Online (Sandbox Code Playgroud)

如果我设置foo 4它返回我8.为什么?我无法理解函数内部实际发生了什么,即使这里有优雅的解释.为什么4成为双方争论xy

f#

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

何时使用 `let ... in` 来绑定变量?

基于“F#中关键字“in”的含义”的回答

let (x = 2 and y = x + 2) in
    y + x
Run Code Online (Sandbox Code Playgroud)

这不会像

let (x = 2 and y = x + 2)
    y + x
Run Code Online (Sandbox Code Playgroud)

在前一种情况下x,只绑定在in关键字之后。在后一种情况下,正常的变量作用域规则生效,因此变量一经声明就被绑定。

当需要使用 , 指定绑定变量in而不是声明时绑定?

.net f# functional-programming

3
推荐指数
1
解决办法
133
查看次数

f#:使用".. in let ..."的示例中的奇怪语法

我正在阅读关于RosettaCode的示例,并且不完全知道以下行正在做什么.

let min,subheap = findMin heap' in let rtn = root topnode
Run Code Online (Sandbox Code Playgroud)

它似乎findMin heap'是自包含的执行单元.我不知道它与"in"运算符的关系,也不了解在"in"运算符中使用let语句.

这是整个方法

let rec private findMin heap =
  match heap with | [] -> raise Empty_Heap //guarded so should never happen
                  | [node] -> root node,[]
                  | topnode::heap' ->
                    let min,subheap = findMin heap' in let rtn = root topnode
                    match subheap with
                      | [] -> if rtn.k > min.k then min,[] else rtn,[]
                      | minnode::heap'' ->
                        let rmn = root minnode
                        if …
Run Code Online (Sandbox Code Playgroud)

f# rosetta-code

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

标签 统计

f# ×5

.net ×1

functional-programming ×1

keyword ×1

rosetta-code ×1