[問題] 函數與交換率

看板PLT (程式語言與理論)作者 (一卡那亞)時間13年前 (2011/06/04 00:21), 編輯推噓3(306)
留言9則, 4人參與, 最新討論串1/1
大家好,今天在寫程式時,才突然發現,有些合成函數具有\ 交換律,有一些合成函數則不具有交換律,但卻想不通為什\ 麼會如此?希望能獲得關鍵字,感謝。 舉個例子來說。 (以下用 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

06/04 00:31, , 1F
交換 "律" 才對
06/04 00:31, 1F
已修正,感謝

06/04 00:36, , 2F
另外,我也不覺得這種情況是交換律
06/04 00:36, 2F

06/04 00:51, , 3F
函數一般沒有交換律,特例情形才有。您的第一個例子也是
06/04 00:51, 3F

06/04 00:52, , 4F
Wadler "Theorems for Free" 那篇文章的起例,請參閱。
06/04 00:52, 4F
感謝提供關鍵字。 ※ 編輯: drm343 來自: 59.113.137.132 (06/04 12:05)

06/04 20:44, , 5F
我們會說某個 function 是 associative, 但你的例子裡,
06/04 20:44, 5F

06/04 20:44, , 6F
其實是兩個完全不同的 function, 這樣不是 associative
06/04 20:44, 6F

06/08 09:01, , 7F
這邊提的是 compoosition 這個 operators 的性質。
06/08 09:01, 7F

06/08 09:01, , 8F
另外,commutativity 才是交換律。
06/08 09:01, 8F

06/09 22:23, , 9F
sorry, 錯很多 XD
06/09 22:23, 9F
喔喔!原來我整個弄錯名詞了,對不起。 ※ 編輯: drm343 來自: 59.113.136.109 (06/09 22:56)
文章代碼(AID): #1DwGeJRE (PLT)
文章代碼(AID): #1DwGeJRE (PLT)