如何解决从Bool到Bool有多少种不同的功能?
由于(至少在我看来)这与编程紧密相关,所以我在这里而不是在math或cs上提问,但是如果您认为它最适合那里或那里另一方面,请发表您的看法。
在Bartosz Milewski的程序员分类理论的第二章结尾处,有一个问题:
这是我的理由:
-
Bool
中只有两个元素,Bool
和True
; - different 是指被视为黑匣子的函数,无论它们内部发生了什么(例如,两个函数将两个
False
的和编码为Int
和arg1 + arg2
分别是从arg2 + arg1
到Int
的相同函数); - 所以不同的功能是从两个
Int
中的一个到两个Bool
中的另一个的功能:-
Bool
至T
-
T
至T
-
F
至F
-
T
至F
-
- 我需要什么功能来实现那些出入场景?好吧,我想我只需要两个,例如恒等函数(允许1和4)和取反(允许2和3)。
我的推理正确吗?
解决方法
有四个功能:
1
假->假
正确->错误
2
假->假
正确->正确
3
false-> true
正确->错误
4
false-> true
正确->正确
说明
您的推理基本上是正确的。这些功能是黑匣子,我们将其视为值。由于输入是布尔值,并且具有两个可能的值,并且该函数可能具有两个单独的值,基本上是2 ^ 2 = 4
时的数字 ,不同的功能是从两个
Bool
中的一个到两个Bool
中的另一个的功能
不。函数确实将其domain的每个值映射到其共域的一个值。您需要考虑所有可能的映射组合。为此,将功能视为relation并列出所有功能可能很有意义:
-
f -> f
,t -> f
-
f -> f
,t -> t
-
f -> t
,t -> f
-
f -> t
,t -> t
这些对应于4个功能
-
x => f
(始终为false) -
x => x
(身份) -
x => not(x)
(否定) -
x => t
(不变)
您要求编程的事实,而不是数学或CS,很重要。
在Math上,他们会告诉您有四个这样的函数,其他答案列出了它们。
在CS上,他们告诉您有27个:三个可能的输入T F和each中的每一个分别对应三个可能的输出T F和⊥中的一个。
在编程方面,我可以告诉您十一点:
- (T-> T,F-> F,⊥->⊥)身份
- 不是(T-> F,F-> T,⊥->⊥)
- (T-> T,F-> T,⊥-> T)惰性常数true
- (T-> F,F-> F,⊥-> F)惰性常数false
- (T-> T,F-> T,⊥->⊥)严格常数true
- (T-> F,F-> F,⊥->⊥)严格常数false
- (T->⊥,F-> F,⊥->⊥)身份验证失败
- (T-> T,F->⊥,⊥->⊥)身份因错误而失败
- (T->⊥,F-> T,⊥->⊥)不会失败
- (T-> F,F->⊥,⊥->⊥)不会因错误而失败
- (T->⊥,F->⊥,⊥->⊥)失败
(这个答案很讽刺:我认为实际上大多数学术型CS类型都会说4或11。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。