我想做一個Haskell函式,它以兩個字串為引數,第一個是我們想在第二個引數中定位的字串,并回傳一個包含每個出現的起始和結束索引的圖元串列。例如,
indexTuples :: String -> String -> [(Int, Int)]
indexTuples "aa" "foobaarfoobaar"
Output: [(4,5), (11,12) ]
到目前為止,我已經做了一個幫助函式,可以找到索引(除了Prelude方法之外,我試圖不使用任何額外的方法,而是自己實作)。
我的幫助函式接受一個字串和一個字符,并給出索引,就像這樣:
我的幫助函式接受一個字串和一個字符,并給出索引。
findPos :: (Num a1, Enum a1, Eq a2) => [a2] -> a2 -> [a1] 。
findPos str c = [index | (x, index) <- zip str [0. ], x == c] 。
(我在這里找到這個解決方案。這個函式將帶有無限數字串列的字串壓縮成圖元,然后選擇字符等于引數c的圖元并回傳每個圖元的索引。這給了我這樣的輸出:
Ok, one module loaded.
ghci> findPos "blablabla" 'b' 。
[0,3,6]
但是,我如何做才能使它接受兩個字串而不是? 像這樣:
ghci> findPos "blablabla"/span> "bl"/span>
[(0,1), (3, 4), (6,7) ]
我試著把c從一個char變成一個字串物件,但是在ghci中我得到了幾個錯誤。
uj5u.com熱心網友回復:
一個(非空的)字串有一個頭部元素,一個Char:
indexTuples :: String -> String -> [(Int, Int)]
indexTuples [] _ = []
indexTuples (c:cs) str = =
let
ixs = findPos str c
我們一一嘗試
len = length cs
fits = [ (i,i len) | i <- ixs, cs == (take len $ drop i str) ]
這就是我們的答案。
in
適合
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307840.html
標籤:
