回答
f[]=[]
f(x:xs) = x : [y|y <- f xs, x/=y]
該函數從列表中刪除重複項。以下是它的工作方式:
- 基本情況下,列表爲空,所以它返回空列表。
- 否則你採取第一個元素
x
,並假設(歸納假設)f xs
給你沒有重複的列表。現在,你唯一要做的就是確保你不要再插入x
。因此,列表擴展意味着:將其餘所有元素(通過歸納假設都是唯一的)取出,但刪除x
。
現在感覺嗎?
ps。你可以寫第二個子句也是這樣的: f(x:xs) = x : filter (/= x) (f xs)
非常清楚...... – Ohad
你可以重寫整個定義爲:'f = foldr(\ x - >(x :)。filter(/ = x))[] ' – user3237465
在我看來,它消除列表中的任何重複條目的方式。
下面是它如何工作的:
f[] = []
意味着,當輸入一個空表,輸出將是一個空列表。
然後,f(x:xs) = x: [y|y <- f xs, x/=y]
使用所謂的列表理解。它需要輸入列表的頭部,然後附加列表理解。
列表內涵讀這樣的:「Y這樣y是F(XS),和y並不等於X」
所以它在f個元素不(XS)的列表等於頭元素。
我運行f [1,2,3,4,12,3,1,2,1,4],我得到沒有重複的列表...但我沒有得到它的工作方式.. – Ohad
否,你不能;那隻會讓你看到第一個元素不重複的元素列表。所以,f([1,1,2,2])會返回[1,2,2]。 – Santiclause
我現在明白了..謝謝你 – Ohad
- 1. 這個LSB函數做了什麼?
- 2. 這個callback()函數做了什麼?
- 3. R - 這個tapply()函數做了什麼?
- 4. 這個ruby函數做了什麼?
- 5. 這個C++函數做了什麼?
- 6. 這個get_text函數做了什麼?
- 7. 這個函數做了什麼細節?
- 8. $ rootScope在這個函數中做什麼?
- 9. 這個函數做什麼?
- 10. 這個函數做什麼?
- 11. 這個函數在Facebook的JavaScript源代碼中做了什麼?
- 12. echo()函數在這個程序中做了什麼?
- 13. 我在這個bash函數中做了什麼錯誤?
- 14. 這個函數在javascript中做了什麼?
- 15. 這個post_class函數在wordpress中做了什麼?
- 16. rbegin和rend()在這個函數中做了什麼?
- 17. 我在這個PLSQL函數中做了什麼錯誤?
- 18. 這個函數在codeigniter中做了什麼?
- 19. 這個函數在PHP中做了什麼
- 20. 這個函數在腳本中做了什麼?
- 21. 這個指針在這個函數的參數中做了什麼?
- 22. 爲什麼這個Haskell函數很慢?
- 23. Haskell - 這個函數有什麼問題?
- 24. 這個cronjob做了什麼?
- 25. 這個C函數在做什麼?
- 26. 這個函數在做什麼?
- 27. 這個構造函數在做什麼?
- 28. 這個Ruby函數在做什麼?
- 29. Haskell:這個方法做什麼
- 30. 這個@ngrx效果例子中的reduce函數做了什麼?
你有沒有試過運行它?遞歸的特殊性你不瞭解嗎? –