如何在Haskell中遞歸地編寫「isPrefixOf」函數?Haskell「isPrefixOf」函數遞歸地完成
我想查看列表是否是另一個列表的前綴,但我必須遞歸執行。我一直在嘗試,但我找不到任何合適的解決方案。 任何想法?
如何在Haskell中遞歸地編寫「isPrefixOf」函數?Haskell「isPrefixOf」函數遞歸地完成
我想查看列表是否是另一個列表的前綴,但我必須遞歸執行。我一直在嘗試,但我找不到任何合適的解決方案。 任何想法?
這裏有一些提示。有三種情況 -
這三種情況的結果應該是什麼?你能否看到第三個病例如何遞歸治療?
第一種情況是isPrefixOf [] _ =錯誤「第一個列表是空的」第二種情況是isPrefixOf _ [] =相同類型的錯誤,但是當它們都是非空時,我看到的是遞歸的,但是我不知道我該怎麼做.. – user2876457
我不同意你的第一個案例或第二個案例。當然,空列表是每個*其他列表的前綴? –
前兩種情況將返回False,而第三種情況則爲True。是嗎? – user2876457
那麼你一直在嘗試什麼?任何想法,或者你在尋找一個普遍的想法......? – Ryan
我一直在嘗試: isPrefixOf :: Eq a => [a] - > [a] - > Bool isPrefixOf [] [] =錯誤「Empty Strings!」 isPrefixOf(x:xs)(y:ys) | x == y = isPrefixOf [xs] [ys] |否則= False – user2876457
在你的代碼中,'xs'是一個列表,比如'[1,2,3,4]'。當你調用'isPrefixOf [xs] [ys]'時,你傳遞的是包含在另一個列表*中的列表,所以'[xs]'是'[[1,2,3,4]]',列表中有一個元素(並且該元素是具有4個元素的列表)。 – luqui