ASP.NET教程之【F#2.0系列】利用F#举行算术操纵
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。利用F#举行算术操纵 基础范例:范例 形貌 示例 .NET范例 bool True/falsevalues true,false System.Boolean byte 8-bitunsignedintegers 0uy,19uy,0xFFuy System.Byte sbyte 8-bitsignedintegers 0y, 19y,0xFFy System.SByte int16 16-bitsignedintegers 0s, 19s,0x0800s System.Int16 uint16 16-bitunsignedintegers 0us,19us,0x0800us System.UInt16 int, int32 32-bitsignedintegers 0, 19,0x0800,0b0001 System.Int32 uint32 32-bitunsignedintegers 0u, 19u,0x0800u System.UInt32 int64 64-bitsignedintegers 0L, 19L,0x0800L System.Int64 uint64 64-bitunsignedintegers 0UL,19UL,0x0800UL System.UInt64 nativeint Machine-sizedsignedintegers 0n, 19n,0x0800n System.IntPtr unativeint Machine-sizedunsignedintegers 0un,19un,0x0800un System.UIntPtr single,float32 32-bitIEEEfloating-point 0.0f,19.7f,1.3e4f System.Single double,float 64-bitIEEEfloating-point 0.0,19.7,1.3e4 System.Double decimal High-precisiondecimalvalues 0M, 19M,19.03M System.Decimal bigint Arbitrarilylargeintegers 0I, 19I Math.BigInt bignum Arbitrary-precisionrationals 0N, 19N Math.BigNum unit Thetypewithonlyonevalue () Core.Unit
在F#中,对数字的加减乘除操纵均是不反省的(unchecked);就是说假如超越局限,不会失掉非常。比方,2147483647是最年夜的32位整数:
> 2147483647+1;;
val it : int = -2147483648
同时,我们也供应了反省溢出的完成:Microsoft.FSharp.Core.Operators.Checked。这个模块(module)中完成的操纵将在移除产生时抛出System.OverflowException非常。
假如但愿制止溢出,可使用decimal,bigint和bignum范例。
除零将会失掉System.DivideByZeroException,但浮点数(floating-pointnumber)除外,浮点数除零将会前往Infinity和-Infinity。
经由过程范例推导(typeinference)来断定操纵符重载―假如没有重载则F#商定利用32位整数的操纵符。
假如但愿利用指定范例的操纵符,则必需利用范例正文(typeannotation)来匡助范例推导器推导出准确的了局:
> let squareAndAdd a b = a * a + b;;
val squareAndAdd : int -> int -> int
假如我们必要指定利用float的操纵符,只需:
> let squareAndAdd (a:float) b = a * a + b;;
val squareAndAdd : float -> float -> float
这就是范例推导器发扬的感化。
位(bitwise)操纵
位操纵符:
操纵符 形貌 举例 了局 &&& 与 0x65&&&0x0F 0x05 或 0x650x18 0x7D ??? 异或 0x65???0x0F 0x6A ~~~ 求反 ~~~0x65 0xFFFFFF9a <<< 左移 0x01<<<3 0x08 >>> 右移 0x65>>>3 0x0C
将一个32位整数编码成(encode)1,2,或5个字节,并用一个数字列表前往。
let encode (n: int32) =
if (n >= 0 && n <= 0x7F) then [ n ]
elif (n >= 0x80 && n <= 0x3FFF) then [ (0x80 (n >>> 8)) &&& 0xFF;
(n &&& 0xFF) ]
else [ 0xC0; ((n >>> 24) &&& 0xFF);
((n >>> 16) &&& 0xFF);
((n >>> 8) &&& 0xFF);
(n &&& 0xFF) ]
挪用:
> encode 32;;
val it : int32 list =
> encode 320;;
val it : int32 list =
> encode 32000;;
val it : int32 list =
数字范例转换
分歧数字范例之间不会隐式转换。必需利用响应的操纵符举行显式的范例转换:
操纵符 形貌 用法 了局 sbyte 转换为sbyte sbyte(-17) -17y byte 转换为byte byte255 255uy int16 转换为int16 int160 0s uint16 转换为uint16 uint1665535 65535us int/int32 转换为int int17.8 17 uint32 转换为uint32 uint3212 12u int64 转换为int64 int64(-100.4) -100L uint64 转换为uint64 uint641 1UL float32 转换为float32 float3265 65.0f float 转换为float float65 65.0
必要注重的是,这些转换都是不反省溢出的。不会抛出非常。如必要利用溢出非常,仍是必要利用Microsoft.FSharp.Core.Operators.Checked模块下的操纵符。大概也能够利用.NET的System.Convert。但利用System.Convert会带来一些成绩,必要利用范例正文来匡助范例推导器事情。
数字对照
可使用的操纵符为=,,<,<=,>,>=,min和max。全都和字面的意义不异。
必要注重的是,当对浮点数举行操纵的时分,这些操纵符完成了IEEE的NaN。任何包括NaN的对照操纵城市前往false。
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么? 主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 逐步缩小出错代码段的范围,最终确定错误代码的位置。 但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。 ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。 现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。 Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
页:
[1]