我一直试图进入和关闭F#一段时间,但我一直在推迟.为什么?
因为无论我尝试查看哪些"初学者"资源,我都会看到开始使用运算符的非常简单的示例->
.
然而,我还没有找到任何地方,它提供了这个运算符意味着什么的清晰简单的解释.它似乎必须如此明显,即使完成新手也不需要解释.
因此,我必须非常密集,或者可能是将近三年的经历阻碍了我.
有人可以请,解释它或指向一个可以解释它的真正可访问的资源吗?
' - >'不是运营商.它出现在许多地方的F#语法中,其含义取决于它如何用作较大构造的一部分.
在类型中," - >"描述了人们如上所述的函数类型.例如
let f : int -> int = ...
说'f'是一个接受int并返回int的函数.
在lambda中("以'fun'关键字开头的东西"),' - >'是将参数与主体分开的语法.例如
fun x y -> x + y + 1
是一个表达式,它定义了具有给定实现的两个参数函数.
在"匹配"构造中," - >"是将模式与模式匹配时应运行的代码分开的语法.例如,在
match someList with | [] -> 0 | h::t -> 1
每个' - >'左边的东西都是模式,右边的东西是左边的模式匹配时会发生什么.
理解上的困难可能源于错误的假设,即" - >"是具有单一含义的"运算符".类比可能是"." 在C#中,如果您以前从未见过任何代码,并尝试分析"." 基于查看"obj.Method"和"3.14"以及"System.Collections"的运算符,您可能会非常困惑,因为符号在不同的上下文中具有不同的含义.然而,一旦你了解了足够的语言来识别这些背景,事情就会变得清晰.
它基本上意味着"映射到".以这种方式阅读或"变成"或类似的东西.
那么,从20分钟的F#教程开始,
> List.map (fun x -> x % 2 = 0) [1 .. 10];; val it : bool list = [false; true; false; true; false; true; false; true; false; true]
代码(fun i - > i%2 = 0)定义了一个匿名函数,称为lambda表达式,它有一个参数x,函数返回"x%2 = 0"的结果,即x是否为甚至.
第一个问题 - 你熟悉C#中的lambda表达式吗?如果是这样的话,那么F#中的 - >与C#中的=>相同(我想你会读到它'去').
- >运算符也可以在模式匹配的上下文中找到
match x with | 1 -> dosomething | _ -> dosomethingelse
我不确定这是否也是一个lambda表达式,或其他什么,但我想'转到'仍然成立.
也许你真正指的是F#解析器的'神秘'响应:
> let add a b = a + b val add: int -> int -> int
这意味着(正如大多数示例所解释的)add是一个'val',它接受两个int并返回一个int.对我来说,这开始时完全不透明.我的意思是,我怎么知道add不是一个带有一个int并返回两个int的val?
嗯,事实是,从某种意义上说,确实如此.如果我只添加一个int,我得到一个(int - > int):
> let inc = add 1 val inc: int -> int
这个(currying)是使F#如此性感的东西之一.
有关F#的有用信息,我发现博客对任何官方"文档"都更有用:以下是一些要查看的名称
Dustin Campbell(这是diditwith.net,在另一个答案中引用)
Don Symes(''男人)
Tomasp.net(又名Tomas Petricek)
安德鲁肯尼迪(计量单位)
Fsharp.it(以项目Euler解决方案而闻名)
http://lorgonblog.spaces.live.com/Blog (又名Brian)
乔莫费舍尔