仓酷云

标题: ASP.NET网页编程之【F#2.0系列】利用F#的List [打印本页]

作者: 逍遥一派    时间: 2015-1-16 22:20
标题: ASP.NET网页编程之【F#2.0系列】利用F#的List
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。利用F#的List  创立一个list:
  语法  形貌  示例  []  空list  []  expr::expr  将一个项到场一个list  1::[2;3]  [expr;...;expr]  枚举项创立list  [1;2;3]  [expr..expr]  一连的数字  [1..99]  [forxinlist...]  经由过程运算天生list(相似于Linq里的select)  [forxin1..99->x*x]  expr@expr  兼并两个list  [1;2]@[3]
  操纵示例:
let oddPrimes = [3; 5; 7; 11]
let morePrimes = [13; 17]
let primes = 2 :: (oddPrimes @ morePrimes)
val primes : int list = [2; 3; 5; 7; 11; 13; 17]
  list一样是不成变的(immutable):操纵符“::”并未真正改动原list自己,相反的,它创立了一个新的list。示例:
> let people = [ "Adam"; "Dominic"; "James" ];;
val people : string list
 
> people;;
val it : string list = [ "Adam"; "Dominic"; "James" ]
 
> "Chris" :: people;;
val it : string list = [ "Chris"; "Adam"; "Dominic"; "James" ]
 
> people;;
val it : string list = [ "Adam"; "Dominic"; "James" ]
  如你所见,people并未被改动。在内存中,F#将list暗示为联系关系的list;每一个F#的list的值(value)包括了本身的值和指向下一个列表的指针。也就是说当你利用“::”来创立一个新的list的时分,新list的尾部就包括了一个指向老list的指针。
  在我看来,经由过程不成变性与指针的分离,进步了list的内存使用效力。
  我们再看一个分化(decompose)list的例子:
let oddPrimes = [3; 5; 7; 11]
let printFirst primes =
    match primes with
     h :: t -> printfn "The first prime in the list is %d" h
     [] -> printfn "No primes found in the list"
> printFirst oddPrimes;;
The first prime in the list is 3
val it : unit = ()
  程序经由过程h::t来分化list,h代表list的第一个元素,t代表厥后续。[]代表空list。match是婚配入手下手关头字,primes是婚配源,经由过程暗示各类婚配前提。感到相似于switchcase。
  F#包括了一个List模块。其供应了一些功效:
  办法  范例  形貌  List.length  Tlist->int  前往list长度  List.head  Tlist->T  前往非空list的第一个元素  List.tail  Tlist->Tlist  前往非空list中除第一个元素外的其他一切元素  List.init  int->(int->T)->Tlist  经由过程一个能够经由过程索引天生值的函数来机关一个定长list  List.append  Tlist->Tlist->Tlist  前往一个兼并后的list  List.filter  (T->bool)->Tlist->Tlist  前往一个新的过滤后的列表。  List.map  (T->U)->Tlist->Ulist  将一个list经由过程一个转换函数转换为另外一个list  List.iter  (T->unit)->Tlist->unit  对list中的每一个项实行一次指定的函数  List.unzip  (T*U)list->Tlist*Ulist  zip操纵的反向操纵  List.zip  Tlist->Ulist->(T*U)list  将两个具有不异长度的list兼并成一个新的list,不异index的项会组分解元组(tuple),并作为新list中的项。  List.toArray  Tlist->T[]  从一个list天生一个array  List.ofArray  T[]->Tlist  从一个array天生一个list
  下面的申明还都是对照笼统的,示比方下:
> List.head [5; 4; 3];;
val it : int = 5
 
> List.tail [5; 4; 3];;
val it : int list = [ 4; 3 ]
 
> List.map (fun x -> x*x) [1; 2; 3];;
val it : int list = [ 1; 4; 9 ]
 
> List.filter (fun x -> x % 3 = 0) [2; 3; 5; 7; 9];;
val it : int list = [ 3; 9 ]
  从上例可得知,我们可使用fun关头字来暗示匿名函数。
  一些通用的不成变数据布局
  数据范例也许能够分为可变(mutable)的和不成变(immutable)的两种。不成变范例偶然会被称为耐久(persistent)或函数体(functional)。F#中经常使用的不成变范例:
  ・        元组(Tuple)和选项(option):他们都是不成变范例而且是F#的基础(basicworkhorse)
  ・        不成变链表’Tlist:十分合适从左至右的便当。但不合适随机会见。随机会见的工夫庞大度为O(n),n为list的长度。全名为:Microsoft.FSharp.Collections.List<’T>。
  ・        基于均衡树(balancedtree)的不成变set范例:十分合适增加,会见和兼并,O(log(n))的会见工夫庞大度。由于此范例是不成变的,外部的节点能够在分歧的sets之间共享。
  ・        基于均衡树(balancedtree)不成变的map范例:复杂的说就是不成变的字典范例(dictionary)。也一样具有O(log(n))的会见工夫庞大度
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。
作者: 若天明    时间: 2015-1-19 09:06
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
作者: 蒙在股里    时间: 2015-1-25 19:08
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
作者: 不帅    时间: 2015-2-3 15:59
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
作者: 小女巫    时间: 2015-2-9 03:49
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
作者: 变相怪杰    时间: 2015-2-26 20:50
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
作者: 只想知道    时间: 2015-3-8 17:33
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
作者: 莫相离    时间: 2015-3-16 09:01
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
作者: 分手快乐    时间: 2015-3-22 21:58
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2