日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

F#基础教程 列表

發布時間:2023/12/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 F#基础教程 列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? F#中的列表是F#內置的簡單集合類型。一個F#列表可以為空,用方括號代表([]),也可以是一組值的串聯。你可以使用F#內置的操作符(::)串聯一個列表。下面的例子給出一些示例,開始第一行為空列表,第二三行為使用(::)串聯多個字符串的列表。

#light
let emptyList = []
let oneItem = "one " :: []
let twoItem = "one " :: "two " :: []

????? 將值串聯的語法有點冗長,因此,如果你只是想定義一個列表,可以使用如下簡寫。這種速記法將列表項放在方括號之間,并用分號(;)隔開。

#light
let shortHand = ["apples "; "pairs "]

????? F#有一個二元操作符(@),你可以用它連接兩個列表,示例如下:

let twoLists = ["one, "; "two, "] @ ["buckle "; "my "; "shoe "]

????? 在F#列表中所有的項目必須是同一類型。如果你嘗試在列表中包含不同的類型,例如,嘗試包含一個字符串和整數,你會得到一個編譯錯誤。如果你需要一個混合類型的列表,你可以創建一個類型為obj(F#里的System.Object)的列表。如下示例。

#light
let emptyList = []
let oneItem = "one " :: []
let twoItem = "one " :: "two " :: []

let shortHand = ["apples "; "pairs "]

let twoLists = ["one, "; "two, "] @ ["buckle "; "my "; "shoe "]
let objList = [box 1; box 2.0; box "three"]

let printList l =
  List.iter print_string l
  print_newline()

?

let main() =
printList emptyList
printList oneItem
printList twoItem
printList shortHand
printList twoLists


for x in objList do
  print_any x
  print_char ' '
  print_newline()
main()


執行結果:

one
one two
apples pairs
one, two, buckle my shoe
1 2.000000 "three"

????? F#的列表是不可變的(它也是值類型)。換句話說,一旦你創建一個列表,它就不能改變。函數與運算符并不改變他們,而是創建一個新的,另一個版本的列表,舊的列表以后仍可使用。下面的例子演示了這一點,創建一個包含單一字符串的F#列表,然后創建兩個列表,每個都使用前一個做為基礎串聯。最后,List.rev函數應用于最后創建的列表執行逆轉。當你打印這些列表時,可以看出,所有的列表都保持定義時而未改變。不必擔心占用更多空間,不變量(值)對于垃圾回收程序是最易處理的。

#light
let one = ["one "]
let two = "two " :: one
let three = "three " :: two


let rightWayRound = List.rev three


let printList l =
  List.iter print_string l
  print_newline()


let main() =
  printList one
  printList two
  printList three
  printList rightWayRound
main()

執行結果:

one
two one
three two one
one two three

????? 最常使用列表的是遞歸表達式。空列表代表基本情況,當函數接收一個空列表時,函數終止返回。當函數接收一個非空列表,它的第一項(頭)被匹配處理,然后遞歸處理列表的其余部分(尾),下面示例演示了遞歸列表的使用。

#light
let listOfList = [[2; 3; 5]; [7; 11; 13]; [17; 19; 23; 29]]


let rec concatList l =
  if List.nonempty l then
    let head = List.hd l in
    let tail = List.tl l in
    head @ (concatList tail)
  else
    []


let primes = concatList listOfList
print_any primes

????? 首先,定義了由三個列表組成的F#列表。然后,定義一個遞歸函數concatList,其目的是合并列表中的列表為一個列表。該函數使用了F#庫函數List.nonempty:檢查F#列表是否為空。如果不為空,取列表頭和列表尾,尾部調用函數本身,然后串聯到頭部;如果尾部為空,則返回空列表串聯,因為空列表的串聯對結果無影響。執行效果如下:

[2; 3; 5; 7; 11; 13; 17; 19; 23; 29]

????? concatList函數的定義比較冗長。幸運的是,F#包括一些針對于列表的模式匹配語法。將在以后章節介紹。

轉載于:https://www.cnblogs.com/IBBC/archive/2011/11/23/2260388.html

總結

以上是生活随笔為你收集整理的F#基础教程 列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。