我有一個長度為 10 的“恒溫器”字串。我還有另一個長度為 3 的字串“冰”。
我想重復第二個字串 'ice' 的字母并形成一個新字串以匹配第一個字串的長度。
所以預期的結果看起來像長度為 10 的 'iceiceicei',與第一個字串相同。
我該如何實施?
uj5u.com熱心網友回復:
length按照其他兩個答案中的建議使用并不理想,因為它無法用于無限序列。假設您想重復ice某個字串的長度s,但s被定義為repeat 'x'? 當然,你永遠無法“完成”這個任務,但無限字串cycle "ice"仍然是一個正確的解決方案,你可以得到它的任何你想要的有限前綴。
您可以通過zipping 兩個串列來實作這一點,而不是基于長度進行計算。這是一種常見的技術,適用于任何時候您想對兩個串列成對地做某事。
*Main> take 30 $ zipWith const (cycle "ice") (repeat 'x')
"iceiceiceiceiceiceiceiceiceice"
表示為一個函式,這看起來像
filledWith :: [a] -> [b] -> [b]
holder `filledWith` items = zipWith const (cycle items) holder
*Main> "thermostat" `filledWith` "ice"
"iceiceicei"
我在這里使用了中綴表示法,因為我認為它有助于記住哪個輸入決定了長度和哪些內容,但是當然,如??果您愿意,您可以定義和使用它的前綴。
uj5u.com熱心網友回復:
使用回圈從您輸入的單詞中創建一個無限串列,比如“冰”。將它與take和另一個字串的長度結合起來。
λ> take 10 $ cycle "ice"
"iceiceicei"
uj5u.com熱心網友回復:
rep original str = take (length original) (cycle str)
ghci> rep "thermostat" "ice"
"iceiceicei"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/347701.html
標籤:哈斯克尔
上一篇:為什么型別類覆寫條件在Haskell中失敗而不是PureScript
下一篇:我必須在代碼中更改什么才能作業?
