作者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)