1

我是Haskell和Functional編程的新手,想知道如何使用函數遞歸迭代實現嵌套循環。特別是,我想編寫一個函數,它將返回True或False,具體取決於字符串中是否存在子字符串。查找字符串是否包含子字符串的函數方法?

注意:在標準庫中必須有一個函數來做到這一點,但是,因爲我正在嘗試學習函數式編程,所以我想自己實現這樣一個函數。

回答

3

您可以通過編寫其計算所有後綴的函數開始:

suffixes :: [a] -> [[a]] 
suffixes [1,2,3] = [[1,2,3], [2,3], [3], []] 

這可以通過遞歸來實現。在圖書館中,這被稱爲tails

然後,您可以編寫一個函數來檢查字符串是否是另一個字符串

isPrefix :: String -> String -> Bool 
isPrefix "a" "abc" = True 
isPrefix "bc" "abc" = False 

同樣的前綴,遞歸就足夠了。

最後,利用這兩個函數來檢查給定的字符串是否是另一個給定字符串的某個後綴的前綴。

(這並不像Knuth-Morris-Pratt高效,但它是簡單的代碼。)

+0

工作就像一個魅力。只是一件事,功能實際上是「尾巴」而不是「尾巴」。 –

+1

來自'Data.List'的'tails'是正確的。 '尾巴[1,2,3] == [[1,2,3],[2,3],[3],[]]''。 –

相關問題