F# Fundamentals

F# Fundamentals   基本语法

 

先是一些简单示例

1.Hello World 

Printfn "Hello World"

 

2.简单的Windows Form程序

复制代码
open System.Windows.Form

let form = new Form (Visible=true)

form.Click.Add (fun _ -> printfn "click")

Application.Run form
复制代码

 

3.斐波那契数列

复制代码
let rec fib x = 
    
if x < 2 then 1 
    
else fib (x–1) + fib (x-2)

let results = Array.map fib [| 1 .. 40 |]

printfn "results = %A" results
复制代码


感觉怎么样,嘿嘿,OCAML的语法,刚开始看起来肯定是挺晕的。

 

let关键字

let关键字用来绑定(binding)

let data = (123)           //绑定一个静态值

let f (a, b, c) =              //绑定一个静态方法
    let sum = a + b + c        //绑定一个局部变量
    let g x = sum + x*x        //绑定一个局部方法
    (g a, g b, g c)

不解释,很简单,类似于JavaScript中的var。

NOte注意,F#用缩进表示Scope,开始不是很习惯,习惯了就好。

 

F#中的注释

// comment
(* comment *) --- 这种注释方式在别的语言中还真没见过,孤陋寡闻了。。。


F#中的函数

复制代码
(fun x -> x + 1)             ---匿名函数

let f x = x + 1

(f, f)

val f : int -> int 
复制代码

 

F#中的操作符

由于F#允许操作符重载,而且支持的操作符也较多,所以显得有些混乱,如果想了解具体的重载规则,请参考老赵的这篇文章http://www.cnblogs.com/JeffreyZhao/archive/2009/12/14/fsharp-operator.html 

算术运算符

复制代码
Overloaded Arithmetic   
+ y        Addition 
- y        Subtraction 
* y        Multiplication 
/ y        Division 
% y        Remainder/modulus 
-x        Unary negation 
复制代码

 

逻辑运算符

not expr    Boolean negation
expr && expr    Boolean “and”
expr || expr    Boolean “or”


F#的基础类型

F#的类型推断系统是很牛X的,具体怎么牛,大家自己慢慢研究吧。。。

下面是F#的基本类型

复制代码
Basic Types/Literals
    
int        76    
    
string     "abc"@"c:\etc"
    
float      3.143.2e5
    
char       '7'
    
bool       truefalse
    unit       ()
复制代码

 

因为也是基于CLR的,所以基本类型都差不多。

但是F#为了科学计算,所以又增加了一些类型支持。

复制代码
Basic Types and Literals
sbyte      = System.SByte        76y
byte       = System.Byte        76uy
int16      = System.Int16        76s
uint16     = System.UInt16        76us
int32      = System.Int32        76
uint32     = System.UInt32        76u
int64      = System.Int64        76L
uint64     = System.UInt64        76UL
string     = System.String        "abc"@"c:\etc"
single     = System.Single        3.14f
double     = System.Double        3.143.2e5
char       = System.Char        '7'
nativeint  = System.IntPtr        76n
unativeint = System.UIntPtr    76un
bool       = System.Boolean    truefalse
unit       = FSharp.Core.Unit    ()
obj        = System.Object          box 5
exn        = System.Exception       new ArgumentException()
bigint     = FSharp.Math.BigInt     1024I * 1024I * 1024I * 1024I 
复制代码

 

F#的管道符

这东西早就有一大堆东西支持了,比如powershell,linux shell等

无非就是前个函数的输出作为下一个函数的输入罢了

 

|> f

 

|> f1
  
|> f2
  
|> f3

 

看一个具体的应用

复制代码
open System.IO

let files =
    Directory.GetFiles(@"c:\""*.*",
                       SearchOption.AllDirectories)

let totalSize =
    files
    
|> Array.map (fun file -> FileInfo file)
    
|> Array.map (fun info -> info.Length)
    
|> Array.sum
复制代码


posted on   xiao_p  阅读(593)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库

导航

< 2010年3月 >
28 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示