最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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é)合律(三)的評論 (共 條)

分享到微博請遵守國家法律
伽师县| 霍林郭勒市| 桃源县| 昌图县| 临汾市| 车险| 托克逊县| 普陀区| 香河县| 金乡县| 澎湖县| 射阳县| 河源市| 黑龙江省| 剑川县| 盐池县| 九龙坡区| 安化县| 辽中县| 喀喇沁旗| 元谋县| 屏东县| 都江堰市| 凌海市| 宣威市| 米脂县| 耿马| 灌云县| 剑河县| 曲松县| 天柱县| 虞城县| 金阳县| 南川市| 武隆县| 宜州市| 衡阳市| 桐庐县| 平原县| 呼伦贝尔市| 毕节市|