zoukankan      html  css  js  c++  java
  • F#学习(二)

      接着上一篇,继续开始我们的F#旅程。今天我们依然采用VS2010来演示F#。

      先建立一个F#的项目,在编辑区鼠标右键选择打开F# Interact ive,我们可以在VS运用fsi.exe的所有功能,也可以如同SQL一样选择语句执行。

      首先我们看到上面的提示#help,我们可以直接在 F# Interactive中输入

    #help;;

      就出现了如下图:

      前3个很明显是控制DLL文件和FS文件的动态加载,time是一个很有趣的东西,开启之后在语句快运行时都会有相关的性能指数

      Real: 00:00:00.003, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0

    的显示,很方便我们对程序的性能作出判断。

      好了,前面的简单介绍过后,我们开始正式编写代码了:

    1 > let int = 1
    2 let double = 1.0
    3 let float = 1.0f
    4 ;;
    5
    6 val int : int = 1
    7 val double : float = 1.0
    8 val float : float32 = 1.0f

      1-4行是输入,6-8行是结果。我们发现作为C#关键字的int、double、float在F#中不再是关键字了。而通过结果我们可以看到,F#实际上也是一门强类型的语言,上面声明的3个标识符都有明确的类型。这种类型推导技术大家应该并不陌生,C#3.0的关键字var也正是使用了这种技术。

      了解了类型推导之后,我们接着来看F#的列表推导:

    代码
    1 > let list = [1..10]
    2 let list0 = ['A' .. 'Z']
    3 let list1 = [0..3..30]
    4 let list2 = [9..-1..0]
    5 let list3 = [for x in 1 .. 10 -> x * x];;
    6
    7 val list : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
    8 val list0 : char list =
    9 ['A'; 'B'; 'C'; 'D'; 'E'; 'F'; 'G'; 'H'; 'I'; 'J'; 'K'; 'L'; 'M'; 'N'; 'O';
    10 'P'; 'Q'; 'R'; 'S'; 'T'; 'U'; 'V'; 'W'; 'X'; 'Y'; 'Z']
    11 val list1 : int list = [0; 3; 6; 9; 12; 15; 18; 21; 24; 27; 30]
    12 val list2 : int list = [9; 8; 7; 6; 5; 4; 3; 2; 1; 0]
    13 val list3 : int list = [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]

      如果你需要对集合元素筛选,突然发现

    let evens = [for x in 1 .. 10 when x % 2 = 0 -> x];;

      提示语法错误,这是因为在VS2010中F#对语法方便做了修订,现在需要实现这样的功能要采用下面的写法

    let evens = [for x in 0..10 do if x % 2 = 0 then yield x];;

    可以参考这里

      (今天写了3个小时才写了这么点,看来写Blog也是体力活呢。通过上面可以看到F#给我们的编程带来了便捷的方式,我要再接再厉继续写下去。)

    关注技术,关注生活,关注人生,也别忘记关注身边的人。
    作者:Damon Tian
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    [LeetCode] 215. Kth Largest Element in an Array 数组中第k大的元素
    [LeetCode] 23. Merge k Sorted Lists 合并k个有序链表
    [LeetCode] 146. LRU Cache 近期最少使用缓存
    [LeetCode] 381. Insert Delete GetRandom O(1)
    [LeetCode] 380. Insert Delete GetRandom O(1) 插入删除获得随机数O(1)时间
    [LeetCode] 57. Insert Interval 插入区间
    [LeetCode] 56. Merge Intervals 合并区间
    [LeetCode] 155. Min Stack 最小栈
    移动web开发-------meta
    font-family
  • 原文地址:https://www.cnblogs.com/Damon/p/1732743.html
Copyright © 2011-2022 走看看