Foundations Of FSharp 1.1

 

            说是翻译吧,也不能说是翻译,最多算是在看这本书的时候做的一些简单记录。

            因为其中加入了自己的一些理解,也跳过了许多东西,

            所以说不定某些重要的知识点也没讲到,希望不会误导到其他人吧,哈。

 

 第一章

  标识符

  在F#中你可以使用 let 来定义一个 标识符 并赋予他一个值、对象或是表达式。
  如:
  

  let  n =  40

 

  在许多有编程背景的人眼中,会觉得:“这不就是一个变量嘛,还用你说?“
  如果这个跟变量一样,那我就不会拿出来说了,之所以叫标识符,是因为在定义之后,他的值是不可变的。
  但在之后的 Scope(作用范围) 中会讲到,在某些情况下,你可以重定义标识符,使他的值能够改变。
  标识符可以看成是变量,也可以看成是一个函数/方法,这意味着在F#中,不能确切的定义方法名、参数名,他们仅仅是一个标识符而已。
  你可以像定义一个变量一样去定义一个函数,只有一点区别,就是函数在let与等号之间具有两个或以上的标识符。
  如:

  let  raisePowerTow x = x **  2.0

  第一个标识符是这个函数的名字,raisePowerTow,接着的是它的参数,x。

 

   Values and Functions

  在F#中Values跟functions是无法区分的,因为functions就是values,F#的语法也把他们定义得非常相似。
   现在可以看到他们的语法是多么的相似了。唯一的区别就是,如果是函数的话,在函数名的后面跟了两个参数a跟b.
   你还可以发现,在这里add不需要明确的说明需要return什么,需要返回的类型,推断系统已经搞定了。
   Example:

 

  let  n =  10
  let  add a b = a + b
  let  addFour add  4
  let  result = addFour n
  printfn 
" result = %i "  result

 

   

  F#同时也支持 局部函数( sometimes called partial or curried functions)
  这意味着你不需要一次把函数需要的参数全部输入了,就如上面的实例:

  let  addFour add  4

 

  这是一个很好的证明:函数即是值(Function are Values)
  因为Function 就是 Values,所以当函数没有接收到需要的所有参数时,他返回的是一个新的准备接受剩余参数的函数
  如:

  let  add a b = a + b
  add 4

 

  运行后可以看到:

 

  val  it  : ( int   ->   int ) = < fun :it@ 4 >

 

 

    但这种行为也并不是永远有效,比如一个函数需要用两个浮点数(float)的参数来表示一个point,
  如:

 

  let  sub(a,b) = a - b
  let  subFour = sub  4

 

  编译器将提示:

This expression was expected  to  have  type
    
' a * b '
but here has 
type
    
int

 

  一般来说,你永远不会需要自己去明确的返回一个值,但如果是在一个函数里面呢?在F#中,这依赖与空格,
  但一般我更倾向于tab,在同一个tab之中,你键入的所有内容,仍处于这个函数的范围呢,这样就可以确定你需要返回的是什么了,
  如:

 

  let  halfWay a b = 
      
let  dif = b - a
      
let  mid = dif /  2
      mid + a

  printfn 
" (halfWay 5 11) = %i "  (halfWay  5   11 )
  printfn 
" (halfWay 11 5) = %i "  (halfWay  11   5 )

  最终的结果是:

  printfn  " (halfWay 5 11) = 8
  printfn  " (halfWay 11 5) = 8

 


  暂时到这里。

你可能感兴趣的:(sha)