簡體   English   中英

如何修復我的替換 haskell 功能?

[英]How can I fix my replace haskell function?

它會在以下情況下工作:replace :: Eq a => a -> a -> [a] -> [a] 將是。 如何在我的代碼中將 az a 轉換為 [a] ?

replace :: Eq a => a -> [a] -> [a] -> [a]
replace _ _ [] = []
replace a x (y:ys)
 | a == y = x : replace a x ys
 | otherwise = y : replace a x ys

Example:

replace '?' "a" "" == ""
replace 'a' "e" "alma" == "elme"
replace 'a' "e" "nincsbenne" == "nincsbenne"

您為第一個守衛( a == y )使用了錯誤的運算符 - :用於將頭元素添加到列表中,但x是列表而不是單個元素,因此您需要使用++連接兩個列表( x一個由遞歸調用返回):

replace :: Eq a => a -> [a] -> [a] -> [a]
replace _ _ [] = []
replace a x (y:ys)
 | a == y = x ++ replace a x ys -- ++ instead of :
 | otherwise = y : replace a x ys

相關 - Haskell (:) 和 (++) 差異

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM