2012-06-20 7 views
2

기능적 프로그래밍 시험을 위해 공부하는 동안, 나는 이전 시험에서 다음과 같은 질문을 가로 질러왔다 익명/람다 함수와 함수의 합성은 :하스켈 :

t1 = (reverse . take 2 . words . \ _ -> name)"!" 

작업은 명령의 출력을 작성하는 것입니다. 변수 이름은 "Smith, John"형식으로 작성된 학생의 이름을 나타냅니다. 타고 단어가하고있는,

["John","Smith,"] 

가 나는 기능이 역을 이해하고 나는 방법을 이해 : 나는 WinHugs에 문을 입력하면, 나는 다음과 같은 출력을 얻을. 연산자가 그들을 연결합니다. 여기서 이해할 수없는 것은 다음과 같습니다.

\ _ -> name 

슬래시, 밑줄 및 "화살표"란 무엇입니까? 또한 인용 부호의 느낌표는 무엇을합니까? (아무것도 아님)

답변

6

람다 함수는 인수 (즉, "!")를 버리고 name을 산출합니다.

\x -> x * x 

\ 람다 함수를 도입하는 데 사용되는 표기법이다

다른 람다 예로서, 다음의 사각형 인수 람다 함수가 될 것이다.

_은 "이름이 신경 쓰이지 않는 변수"를 의미합니다.

->은 람다 함수의 인수를 결과를 지정하는 데 사용 된 표현식과 구분합니다.

+0

좋은 설명. 나는 아직도 느낌표에 의해 다소 혼란 스럽다. 이 경우 감탄 부호가 난독 화에만 추가된다고 말하고 싶습니까? –

+0

'! "는 무시되는 값입니다. 느낌표는 무시되는 문자열의 문자입니다. 무시하십시오. – dave4420

+0

고마워, 이제 알았어. –

3

상수 익명 함수 : 어떤 인수가 반환 name.

하스켈 람다 식 (즉 익명 함수)이 형태로 올 :

\x -> f x 
x 인수이다

f x 표현식이 인자를 사용. 특수 변수 _은 무엇이든 일치하며 중요하지 않은 것으로 간주합니다.

5

거기에 익명의 함수 또는 람다 함수 (이름은 람다 미적분에서옵니다)가 있습니다. 역 슬래시는 함수를 시작한다는 것을 알려줍니다. 밑줄은 함수가 하나의 인수를 취하고 무시한다는 것입니다. 화살표는 인수 목록에서 결과를 가리키며,이 경우 인수는 무시되고 이름이 반환됩니다. 기본적으로 \_ -> nameconst name과 같습니다.

+0

+1은'const name'을 위해 +1합니다. – leftaroundabout

2

"슬래시"는 람다 function의 일부이며 밑줄은 패턴에 사용 된 "와일드 카드"입니다 (삭제됨). 화살표는 람다 함수의 또 다른 부분입니다. \ _ -> name 함수는 입력에 관계없이 이름을 반환하므로 "!" 아무 것도하지 않고 함수에 (사용되지 않은) 입력을 제공합니다.