나는 다음과 같은 하스켈 코드를 인수 빌드 할 얼마나 많은 [('a',0), ('b',1), ]
는 것입니다 압축 된 목록의하스켈 게으른 평가
'X' "abcdXkjdkljklfjdlfksjdljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj"
와
find_first_occurrence :: (Eq a) => a -> [a] -> Int
find_first_occurrence elem list = (snd . head) [x | x <- zip list [0..], fst x == elem]
를 호출 할 경우?
는 UPDATE :
나는
find_first_occurrence 10 [1..]
를 실행하려고하고 거의 즉시 9
를 반환, 그래서 나는 적어도 간단한 경우에 게으른 평가를 사용합니까 것 같아요? 응답도 "즉시"계산됩니다.
let f n = 100 - n
find_first_occurrence 10 (map f [1..])
수정 :
당신의 게으름을 분석하는 또 다른 (아마도 덜 신뢰할 수있는) 방법은
trace
Debug.Trace
에서 기능을 사용하는 것입니다 '엑스'. –Re : "단순한 경우에 대해서만 게으른 평가를 사용하는 것 같아요."Haskell은 모든 경우에 대해 lazy evaluation을 사용합니다. 유일한 예외는'seq'의 존재입니다. –
@Daniel Wagner, 또 다른 예외는 패턴 일치입니다. 맞습니까? – Rotsor