ASP.NET网页编程之【F#2.0系列】利用F#的List
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。利用F#的List 创立一个list:语法 形貌 示例 [] 空list [] expr::expr 将一个项到场一个list 1:: 枚举项创立list 一连的数字 经由过程运算天生list(相似于Linq里的select) expr@expr 兼并两个list @
操纵示例:
let oddPrimes =
let morePrimes =
let primes = 2 :: (oddPrimes @ morePrimes)
val primes : int list =
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 =
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 ;;
val it : int = 5
> List.tail ;;
val it : int list = [ 4; 3 ]
> List.map (fun x -> x*x) ;;
val it : int list = [ 1; 4; 9 ]
> List.filter (fun x -> x % 3 = 0) ;;
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仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。 网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项! 微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。 主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。 主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
页:
[1]