목록에서 인수 a (0)을 인수 b (1)로 대체하는 함수를 (재귀 적으로) 어떻게 수행 할 수 있습니까? 예 :함수 대체
substitute 0 1 [1,0,3,0,4,0,0]
[1,1,3,1,4,1,1]
감사합니다.
목록에서 인수 a (0)을 인수 b (1)로 대체하는 함수를 (재귀 적으로) 어떻게 수행 할 수 있습니까? 예 :함수 대체
substitute 0 1 [1,0,3,0,4,0,0]
[1,1,3,1,4,1,1]
감사합니다.
가장 간단한 지능형리스트를 사용하는 것입니다.
하지만 그건 재귀가 아닙니다.
subst a b [] = []
subst a b (x:xs)
| x==a = b:subst a b xs
| otherwise = x:subst a b xs
foldr
(또는 map
) 패턴의 예이다 :
subst a b = foldr (\x xs-> (if x==a then b else x) : xs) []
subst a b = map (\x -> if x==a then b else x )
그것은 통상 바람직하다 재귀, 그리스트 구조에 대한 케이스 분석 (즉, 구조 재귀) 그냥
subst a b xs = go xs
where
go [] = []
go (x:xs)
| x==a = b:go xs
| otherwise = x:go xs
을하지만 잠시 그것을 응시하는 경우는 다음과임을 인식 :과 같이, 재귀 정의에서 "노동자"기능을 사용하여 s map
패턴. 하스켈에서 재귀 패턴은 map
, filter
등
재귀가 필요하지 않습니다! 이 숙제 인 경우
substitute :: Eq a => a -> a -> [a] -> [a]
substitute old new = map subs where
subs x | x == old = new
| otherwise = x
, 당신은 쉽게 (재귀 임) definition of map
에 대체 할 수 있습니다.
subst a b xs = [c | x<-xs, let c=if x==a then b else x]
: