簡體   English   中英

為什么要采取全面的功能

[英]Why is take a total function

take (-1) [][]

在部分功能上更喜歡這個的原因是什么,即錯誤?

是否存在利用此屬性的用例?

takedrop類似於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

對於任何nxs

可以說,我們應該同時具有takeAtMosttakeAtLeast ,后者是部分變體(或者返回Maybe )。

zip也出現了類似的問題,即使應用於長度不等的列表也是如此。 盡管如此,這經常在成語zip [1..] xs被利用,它將列表中的每個元素與其自己的索引配對。

但請記住,我並不是說總功能始終是首選功能。 在許多情況下,獲取錯誤揭示異常的許多編程任務與獲取錯誤結果並且不知道錯誤位置相比是一種幸福。 或者更糟糕的是,得到一個錯誤但看似合理的結果,甚至沒有發現有一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM