五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

結(jié)。 / 匹配子 —— Ruby 的類型論,實現(xiàn)參數(shù)多態(tài)和交換律、結(jié)合律(三)

2023-06-16 14:57 作者:花角  | 我要投稿

這是一個了斷,

在寫完這篇?匹配子?理論之后,

我不會再去學習和消費?數(shù)學游戲?了。

函數(shù)多態(tài)方式

類似 f :: a, b, c, d, e -> e 這種的

或者 f(a, b, c, d)

f :: a, b, c, d, e -> e 應(yīng)當看成一個整體,也就是一個序列。

(a, b, c, d)輸入序列。 -> e返回序列。

為了不混淆,也就可以叫 serie(系列)。

而函數(shù)的類型,等價于匹配序列的一個模式表達式。

函數(shù)類型 (int, int, int) -> int 匹配 (1, 2, 3)。

-> int需要匹配調(diào)用它的函數(shù)的 槽位?的參數(shù)類型。

可以看到,類型——匹配子的對應(yīng)關(guān)系如下:

設(shè):

其中:

- 可以展開成一個樹,被調(diào)用的函數(shù)稱作某函數(shù)的上游函數(shù),調(diào)用函數(shù)的函數(shù)稱作某函數(shù)的下游函數(shù)。

  • a() 有調(diào)用它的函數(shù)f()a()稱作f()上游函數(shù),而f()稱作a()下游函數(shù)

  • ?g() 沒有調(diào)用者,故,g()稱作該函數(shù)鏈的 根函數(shù)最終下游函數(shù)。

  • ?a() 沒有上游函數(shù),故,a()稱作該函數(shù)鏈的 頂流函數(shù),或末函數(shù)。

  • ?f() 既有上游又有下游,稱 介函數(shù)間函數(shù)。

- 在 f(...) 中:

  -?第一個 a() 匹配下游調(diào)用 f() 的第一個槽位,f() 需要返回值為 int 類型的參數(shù)。于是 a() 調(diào)用了 (->int) 的分支函數(shù)

 ?。?f() 的第二個參數(shù)槽位 需要 str 類型的參數(shù),于是 a() 調(diào)用了 (->str)

- 在 g(...) 中:

 ?。?g() 需要 int 類參數(shù),于是 f() 調(diào)用 了返回值為 int 的分支函數(shù)


- 對于a()

 ?。?第一個a() 匹配下游f()的第一個槽位(int),f() 需要 int 類的參數(shù),因此,a 調(diào)用了(->int) 的分支函數(shù)

  -?第二個a() 匹配 f() 的第二槽(str)。因此調(diào)用了(->str) 分支函數(shù)。

- 對于g()

 ?。?他需要一個 int 類的參數(shù),返回 int 類的值

- 對于f()

 ?。?他在 g() 的第一個槽位,需要 int 類參數(shù),因此,f() 確定了返回值類型,(...->int)

 ?。?(...->)(int str->...) 組合一起,就確定了要調(diào)用 (int str -> int) 分支函數(shù)。

更復(fù)雜的情況:

展開成樹后是:


此時,f() 返回值重載和他的下游函數(shù) g() 該槽位的參數(shù)重載同時存在。

a()f() 互有重載沖突。

根本無法確定匹配哪個分支函數(shù)。

此時,為了確保只有一個結(jié)果——函數(shù)類型的確定性,可采取如下 解疊加消疊加態(tài)) 規(guī)則:

  1. 函數(shù)鏈 *全匹配* 原則:將函數(shù)鏈展開成樹,對所有函數(shù)采取完全匹配成功的類型。

  2. 先后原則:上述步驟還有多分支,則采取第一個定義的分支函數(shù)。

!!! 如果采取了 先后原則,可能無法實現(xiàn)異步定義

如,整個函數(shù)鏈只有 a(),根據(jù)先后原則,返回第一個分支函數(shù)—— a :: int。

匹配子、類型、集合的行為類似。


單子 Just()

Just(1) 只匹配 1,故 Just(1) 是一個 單子。

int int 匹配 1 2 也匹配 2 3,故 int int 不是單子,他的 tokens 全由非匹配子組成,他是個 終匹配子

順序標記

有序匹配子 <int str> 匹配 一個 第一項是int,第二項是str 的序列。

涵序匹配子不關(guān)心序列的順序, [int str] 匹配 int strstr int。

因此 [int str] 蘊含 <str int>。


數(shù)量標記

[int str {..3}] 蘊含 <int> 、<int str>、<str int>...<str int str>...等1+2+3+4=10 個終匹配子。

同時也蘊含 <int str{2..3}> 子匹配子。


類型、類集、單子、終匹配子的區(qū)別

本質(zhì)上說,類型和匹配子一樣,可以匹配實例:

匹配子

? ? 結(jié)。


結(jié)。 / 匹配子 —— Ruby 的類型論,實現(xiàn)參數(shù)多態(tài)和交換律、結(jié)合律(三)的評論 (共 條)

分享到微博請遵守國家法律
宜君县| 威宁| 奉化市| 兰考县| 和硕县| 田林县| 昌乐县| 甘南县| 福贡县| 吕梁市| 开原市| 忻城县| 泰来县| 石城县| 红原县| 子洲县| 昌乐县| 滁州市| 乌拉特后旗| 石首市| 军事| 保亭| 黄山市| 砚山县| 长岛县| 重庆市| 兴和县| 溧阳市| 竹溪县| 哈尔滨市| 溧阳市| 调兵山市| 凤山县| 西乌| 吴旗县| 合阳县| 水富县| 胶南市| 温宿县| 通渭县| 贺兰县|