作者xcycl (XOO)
看板PLT
标题Re: [问题] if是不是函数
时间Wed Sep 29 17:57:10 2010
不晓得这有什麽好吵的 ...
1. 一对多函数是不是函数?Yes or No.
我能不能定义一个函数,每个整数都对应到一个或一个以上的整数?可以,
只是这个函数的值域是 P(Z) 也就是整数的子集合构成的集合。
所以技术上,要把一对多的对应定义成函数没有问题。
2. if A then B 在数理逻辑上,用语意来看是函数。
这没有争议吧?但这跟我们谈的 if 是不一样的东西 ...
3. if 在 imperative language 上,大部分它「不是」该语言上的
函数。但,语意上仍可以看作函数,而且就广义来说,
所有的 statement 都可以看作是 (变数)状态 到 (变数)状态 的函数。
说这个是虚无飘渺的玄学的话,很多人包括 Dijkstra 都会哭哭的 ...
4. 在纯 functional programming 上,几乎都可以写成语言上的函数,包括 if。
而就语意上,untyped 的也都同构於函数。有 type 的话,if 也是函数。
当然因为函数(funtion)一词有许多定义,在数学上也可以指
class function 定义在 class 上而不是集合,也可以更狭义上集合的函数,
到程式语言的定义就更多种了,在组合语言的层面不就是 program counter
跳来跳去外加把状态存起来,在计算模型上 TM 也没有 if statement,
跟组合语言雷同,但 lambda calculus 这种的话,所有的东西都只是 lambda term
没有叫做 function 的,语意上每个都可以对应到一个 function。
「语意」也有精确的意义,Wikipedia 上的 Formal semantics of programming
language 上有些解释,也请不要自己望文生义。(认真讨论下,没有顾名思义的)
※ 引述《godfat (godfat 真常)》之铭言:
: (fixed typo)
: 或许是本板的第一串战火 =_=..
: 首先我想先说,「推文请勿超过三行」,请见板规
: 接下来如果又严重超过三行,水桶一天 (24h)
: 其次我想说,尽量不要有嘲讽的语气,但我能理解有时候还是会很想说。
: 再有嘲讽语气的话我会点名,希望能收敛点。
: ==================== 分隔线 ====================
: 个人想法
: if 是不是 function, 当然要看是哪个语言了,不谈语言只谈概念,
: 那 if 就应该是所有语言的定义的集合,没必要坚持一定是什麽...
: 在现今 imperative 语言充斥的环境下,if 大多是 statement,
: 而在有些有点 functional programming 意味的语言下,会是 expression.
: 另外在很少数的地方,if 确实是个 function.
: 在 if 是 function 的世界里,例如 Agda 中,他的定义是
: if_then_else_ : ∀ {a} {A : Set a} → Bool → A → A → A
: if true then t else f = t
: if false then t else f = f
: 可以在这边看到程式,这是 Agda standard library
: http://www.cs.nott.ac.uk/~nad/repos/lib/src/Data/Bool.agda
: 这一个 function 用到了 mixfix:
: http://wiki.portal.chalmers.se/agda/pmwiki.php?n=ReferenceManual.Mixfix
: 也就是说,当我们写 if b then t else f 时,用一般语言的语法可以看成:
: if(b, t, f)
: 也当然了,整个程式本身是没有任何 side-effect 的,否则这也无法成立。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 94.173.192.16
※ 编辑: xcycl 来自: 94.173.192.16 (09/29 18:06)
※ 编辑: xcycl 来自: 94.173.192.16 (09/29 18:43)
1F:推 yauhh:精辟 09/30 10:21
2F:→ yauhh:我觉得像这样吵仅剩的价值的是看到一些关键字,有资料可读,谢 09/30 10:56
3F:→ yzugsr:推推 10/02 08:54