看板 PLT 關於我們 聯絡資訊
大家好,今天在寫程式時,才突然發現,有些合成函數具有\ 交換律,有一些合成函數則不具有交換律,但卻想不通為什\ 麼會如此?希望能獲得關鍵字,感謝。 舉個例子來說。 (以下用 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
tkcn:交換 "律" 才對 06/04 00:31
已修正,感謝
tkcn:另外,我也不覺得這種情況是交換律 06/04 00:36
ccshan:函數一般沒有交換律,特例情形才有。您的第一個例子也是 06/04 00:51
ccshan:Wadler "Theorems for Free" 那篇文章的起例,請參閱。 06/04 00:52
感謝提供關鍵字。 ※ 編輯: drm343 來自: 59.113.137.132 (06/04 12:05)
godfat:我們會說某個 function 是 associative, 但你的例子裡, 06/04 20:44
godfat:其實是兩個完全不同的 function, 這樣不是 associative 06/04 20:44
xcycl:這邊提的是 compoosition 這個 operators 的性質。 06/08 09:01
xcycl:另外,commutativity 才是交換律。 06/08 09:01
godfat:sorry, 錯很多 XD 06/09 22:23
喔喔!原來我整個弄錯名詞了,對不起。 ※ 編輯: drm343 來自: 59.113.136.109 (06/09 22:56)