접히는 익명으로 함

0

질문

나는 현재 배우려고 접.

그러나 사용하는 대신에 미리 정의된 기능을 사용하고 싶습니다.

그래서 두 번의 모든 모음에서 문자열입니다.

doubleVowels :: String -> String

내한 시도입니다(아직 그냥'a',나는 시도를 해결을 위해 그것을 하나는 첫 번째 편지고 확장하고 최적화합니다,그것은행):

doubleVowels :: String -> String
doubleVowels  a = foldl (\eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a

실행하려고 그는 코드고 다음과 같은 erorr:

Experimenting.hs:8:78: error:
    * Couldn't match type `[Char]' with `Char -> Char'
      Expected type: Char -> Char
        Actual type: String
    * In the expression: a
      In the expression: if eachChar == 'a' then (a ++ "aa") else a
      In the first argument of `foldl', namely
        `(\ eachChar -> if eachChar == 'a' then (a ++ "aa") else a)'
  |
8 | doubleVowels a = foldl (\eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a
  |                                                                              ^

Experimenting.hs:8:81: error:
    * Couldn't match expected type `Char' with actual type `[Char]'
    * In the second argument of `foldl', namely `""'
      In the expression:
        foldl
          (\ eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a
      In an equation for `doubleVowels':
          doubleVowels
            = foldl
                (\ eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a
  |
8 | doubleVowels a = foldl (\eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a
  |                                                                                 ^^
Failed, no modules loaded.

2

최고의 응답

4
doubleVowels :: String -> String
doubleVowels  a = foldr (\eachChar b -> if eachChar == 'a' then ("aa" ++ b) else (eachChar:b)) "" a

대부분의 경우에 없는 경우에는 특별한 이유 foldlfoldrfoldl 을 수 있으므로켈 컴파일러를 느리게 평가하고 표현합니다. 제가 기억하기로는 심지어 다음 사용 foldl'이후 foldl 지 엄격하고 메모리를 너무 많지 않는 동안 당신이 어떤 혜택을 위한 게으름이다.

그 외에도에서,당신은이 두 번째 인수 foldrs(나 foldls)함수입니다. foldr 형식은:

foldr :: (a -> b -> b) -> b -> t a -> b

기능 foldr 은 유형 a -> b -> b 첫 번째 인수는 현재 요소의 접는 구조 그리고 두 번째는 어큐뮬레이터. 람다는 당신이 사용하는 단 하나의 매개 변수입니다.

또한,본체의 람다 함수는 또한 상.

if eachChar == 'a' then (a ++ "aa") else a)

a 은 매개 변수는 주변 기능 doubleVowels 를 받습니다. 필요하신의 매개 변수를 사용하는 람다 함수 여기에.

2021-11-20 04:24:46
4

첫째,함수에서 사용되는 foldl 을 갖고 있어야 합 argments. 첫번째는 accmulated 결과,다른 사람은 현재 char. 둘째,주의의 평가축하고 관리가 왼쪽에서 오른쪽으로,그래서 우리는 reverse 결과 문자열입니다.

예를 들어,여기에 수정 버전

 doubleVowels :: String -> String
 doubleVowels s = reverse $ foldl (\x y -> if y == 'a' then ("aa" ++ x) else (y : x)) "" s
2021-11-20 04:13:13

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

이 카테고리에서 인기

인기 있는 질문에 이 카테고리