[英]Why is take a total function
take (-1) []
是[]
。
在部分功能上更喜歡這個的原因是什么,即錯誤?
是否存在利用此屬性的用例?
take
和drop
類似於left-substring和right-substring函數,並且在實踐中證明它對於那些沒有為負數或無效長度引發錯誤的人來說很方便。
例如 - 填充功能:
pad :: Int -> String -> String
pad n str = (repeat (n - length str) ' ') ++ str
這是一個用另一個字符串填充的變體:
padWith :: String -> Int -> String -> String
padWith field n str = (take (n - length str) field) ++ str
在大塊(最多)拆分列表n
片需要take
以總:
chunks n [] = []
chunks n xs = take n xs : chunks n (drop n xs)
此外,當前的定義確保
take n xs ++ drop n xs == xs
對於任何n
和xs
。
可以說,我們應該同時具有takeAtMost
和takeAtLeast
,后者是部分變體(或者返回Maybe
)。
zip
也出現了類似的問題,即使應用於長度不等的列表也是如此。 盡管如此,這經常在成語zip [1..] xs
被利用,它將列表中的每個元素與其自己的索引配對。
但請記住,我並不是說總功能始終是首選功能。 在許多情況下,獲取錯誤揭示異常的許多編程任務與獲取錯誤結果並且不知道錯誤位置相比是一種幸福。 或者更糟糕的是,得到一個錯誤但看似合理的結果,甚至沒有發現有一個錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.