作者drm343 (一卡那亚)
看板PLT
标题[问题] 函数与交换律
时间Sat Jun 4 00:21:37 2011
大家好,今天在写程式时,才突然发现,有些合成函数具有\
交换律,有一些合成函数则不具有交换律,但却想不通为什\
麽会如此?希望能获得关键字,感谢。
举个例子来说。
(以下用 py3k 做范例)
------------------------------------------------------
下面这个例子是能交换的合成函数。
#reverse 用来将字串反转。
def reverse(x,y = ""):
try:
y = x[0] + y
return reverse( x[1:], y )
except:
return y
#transform 用来替换字串
def transform(x,y = ""):
try:
if x[0] == "A": y += "T"
elif x[0] == "T": y += "A"
elif x[0] == "G": y += "C"
else: y += "G"
return transform( x[1:],y )
except:
return y
DNA = "UGA"
reverse( transform( DNA )) == transform( reverse( DNA ))
---------------------------------------------------------
#以下是不能交换的例子
def sub1(x):
return x-1
def sq(x):
return x**2
x = 2
# 特例为 x = 1 时,
# sub1( sq( x )) == sq( sub1( x ))
sub1( sq( x )) != sq( sub1( x ))
----------------------------------------------------------
为什麽同样都是函数,第一个例子具有交换律,而第二个却没有呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.113.139.93
1F:→ tkcn:交换 "律" 才对 06/04 00:31
已修正,感谢
2F:→ tkcn:另外,我也不觉得这种情况是交换律 06/04 00:36
3F:推 ccshan:函数一般没有交换律,特例情形才有。您的第一个例子也是 06/04 00:51
4F:→ ccshan:Wadler "Theorems for Free" 那篇文章的起例,请参阅。 06/04 00:52
感谢提供关键字。
※ 编辑: drm343 来自: 59.113.137.132 (06/04 12:05)
5F:推 godfat:我们会说某个 function 是 associative, 但你的例子里, 06/04 20:44
6F:→ godfat:其实是两个完全不同的 function, 这样不是 associative 06/04 20:44
7F:→ xcycl:这边提的是 compoosition 这个 operators 的性质。 06/08 09:01
8F:→ xcycl:另外,commutativity 才是交换律。 06/08 09:01
9F:推 godfat:sorry, 错很多 XD 06/09 22:23
喔喔!原来我整个弄错名词了,对不起。
※ 编辑: drm343 来自: 59.113.136.109 (06/09 22:56)