haskell이 다음 표현을 어떻게 evauate하는지 알고 싶습니다.Haskell - span elem : evaluation
span (`elem` ['A'..'Z']) "BOBsidneyMORGANeddy"
결과는
("BOB","sidneyMORGANeddy")
사람이 나에게 평가 과정을 설명 할 수있다? 왜 내가 위와 같이 분할되었는지 말할 수 없기 때문입니다.
haskell이 다음 표현을 어떻게 evauate하는지 알고 싶습니다.Haskell - span elem : evaluation
span (`elem` ['A'..'Z']) "BOBsidneyMORGANeddy"
결과는
("BOB","sidneyMORGANeddy")
사람이 나에게 평가 과정을 설명 할 수있다? 왜 내가 위와 같이 분할되었는지 말할 수 없기 때문입니다.
span
은 첫 번째 부분이 지정된 조건부가 참인 가장 긴 접두사이고 두 번째 부분이 목록의 나머지 부분 인 방식으로 술어를 사용하여 목록을 두 개로 분할합니다. 즉, 첫 번째 부분은 takeWhile
과 같이 얻어지며 두 번째 부분은 동일한 술어에 대해 dropWhile
과 같이 얻어집니다.
이제 조건자를 살펴 보겠습니다. elem :: a->[a]->Bool
은 지정된 요소가 주어진 목록에서 발견되는지 여부를 알려줍니다. 깔끔한 트릭은 두 개 이상의 인자의 기능은 중위 표기법으로 사용할 수 있다는 것입니다 :
x `elem` xs
가 elem x xs
과 동일합니다. 따라서,
`elem` xs
은 중위 함수 섹션처럼 처리됩니다. \x -> elem x xs
과 같습니다.
span
에는 분할 할 목록의 요소가 ['A'..'Z']
목록에서 발견 될 수 있는지 여부를 테스트하는 조건부가 주어집니다. 그래서리스트를 두 개로 나눌 것입니다 : 그것은 술어가 보유하지 않는 첫 번째 요소를 찾고, 그것은 분리 점입니다. 두 번째 파티션이 첫 번째 소문자로 시작하는 방식입니다.
'A'.. 'Z'집합의 _ 문자가 첫 문자가 아니기 때문에 's'에서 분리됩니다. – MathematicalOrchid