這個問題在這里已經有了答案: 代數資料型別的計數 1 個答案 昨天關門。
一些 Haskell 閱讀材料將函式型別描述為指數。即 'a -> b' 類似于 b 的 a 次方。
我不明白函式型別是指數的。假設我們有 Bool -> RBG,其中 RBG 只有三個可能的值。那么 3 的 2 次方是 9。如果我們計算態射,那么只有 6 個可能的態射,而不是 9 個。真 -> R,真 -> B,真 -> G,假 -> R,假 -> B,假 -> G。我不明白。
這個https://bartoszmilewski.com/2015/03/13/function-types/帖子說:
isupper 或 isspace 等函式是使用表實作的,這些表相當于 256 個布林值的元組。元組是一種乘積型別,因此我們要處理 256 個布林值的乘積:bool × bool × bool × ... × bool。
假設函式是 char -> bool,其中 char 是 256 個可能的輸入和 2 個可能的輸出,我們有 2 的 256 次方。對于每個 char,我們可以得到 True 或 False。為什么我們需要取所有布林值的乘積而不是總和?
uj5u.com熱心網友回復:
您似乎在這里缺少的是它True -> R本身不是一個函式,而是一個函式的一半。該函式還需要為False. 有 3 種不同的可能結果False,有 3 種不同的可能結果True,導致3 ** 2或 9 個總函式。您可以自己驗證這一點:
False -> R, True -> R
False -> R, True -> G
False -> R, True -> B
False -> G, True -> R
False -> G, True -> G
False -> G, True -> B
False -> B, True -> R
False -> B, True -> G
False -> B, True -> B
對于Char -> Bool類似的函式isspace,有 256 個不同的字符,每個字符都有 2 個可能的結果之一,導致表格2 * 2 * 2 * ... * 2或2 ** 256總表格。您可以在較小的情況下手動驗證這一點。
uj5u.com熱心網友回復:
只有六個可能的態射而不是九個。真 -> R,真 -> B,真 -> G,假 -> R,假 -> B,假 -> G
您在這里沒有描述從 Bool 到 RGB 的任何單個函式。您已經列出了 Bool 和 RGB 的笛卡爾積,確認元組確實是一種產品型別。有 6 對,但有 9 個功能。
讓我們寫一個函式f :: Bool -> RGB。首先,我們必須為 選擇一個值f False。有三個選擇。現在,對于這些可能性中的每一種,我們需要為 選擇一個值f True。同樣,有三個選擇。所以,我們選擇了三件事中的一件,然后對于每一個這樣的選擇,我們需要從三件事中做出另一個選擇。總共有 3*3 = 3 2 個這種型別的可能函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406349.html
標籤:
