我想洗掉一個字串的最后一個字符,如果它是一個"!"
。我知道我想要基本情況,即如果字串是空的:
remove [] = []
我如何對最后一個字符進行索引? 使用:
last
而且,對于這個問題,創建一個 "如果,然后 "的回圈的最佳方法是什么?
我應該使用衛兵嗎?|
uj5u.com熱心網友回復:
Haskell解決這個問題的方法是使用遞回和模式匹配:
remove "" = " -- obviously
洗掉 "!" = "" --這就是我們的目的。
remove (x:xs) = (x : remove xs) --保留頭部,繼續進行尾部。
任何使用last和條件性結構的嘗試都將不那么優雅和高效。
uj5u.com熱心網友回復:
你不需要用回圈來做這些。你可以從更高的角度出發,用幾個高階函式組成程式,得到這樣的單行代碼,而不是這樣的命令式思維。
import Data.List (tails)
foo :: String ->String
foo = (take 1 =<<) . takeWhile (/= "!") . tails
-- = concat . map (take 1) . takeWhile (/= "!") . tails .
或者用串列理解法,
foo xs = [c | (c:_) <- takeWhile (/= "!") $ tails xs ]
tails重復地獲取輸入串列的tails,takeWhile擺脫最后的'!',如果有的話,concatMap (take 1)從其tails重新組成字串:
concatMap (take 1) . tails
這是對串列的身份操作,而我們正在參與行動,在中間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316954.html
標籤:
