2013-10-13 104 views
1

如何在Haskell中遞歸地編寫「isPrefixOf」函數?Haskell「isPrefixOf」函數遞歸地完成

我想查看列表是否是另一個列表的前綴,但我必須遞歸執行。我一直在嘗試,但我找不到任何合適的解決方案。 任何想法?

+0

那麼你一直在嘗試什麼?任何想法,或者你在尋找一個普遍的想法......? – Ryan

+0

我一直在嘗試: isPrefixOf :: Eq a => [a] - > [a] - > Bool isPrefixOf [] [] =錯誤「Empty Strings!」 isPrefixOf(x:xs)(y:ys) | x == y = isPrefixOf [xs] [ys] |否則= False – user2876457

+1

在你的代碼中,'xs'是一個列表,比如'[1,2,3,4]'。當你調用'isPrefixOf [xs] [ys]'時,你傳遞的是包含在另一個列表*中的列表,所以'[xs]'是'[[1,2,3,4]]',列表中有一個元素(並且該元素是具有4個元素的列表)。 – luqui

回答

6

這裏有一些提示。有三種情況 -

  • 第一個列表是空的(無所謂第二個是什麼)。
  • 第一個列表非空,但第二個列表爲空。
  • 這兩個列表都是非空的。

這三種情況的結果應該是什麼?你能否看到第三個病例如何遞歸治療?

+0

第一種情況是isPrefixOf [] _ =錯誤「第一個列表是空的」第二種情況是isPrefixOf _ [] =相同類型的錯誤,但是當它們都是非空時,我看到的是遞歸的,但是我不知道我該怎麼做.. – user2876457

+2

我不同意你的第一個案例或第二個案例。當然,空列表是每個*其他列表的前綴? –

+0

前兩種情況將返回False,而第三種情況則爲True。是嗎? – user2876457