2012-01-03 14 views
3

나는 Land of Lisp에서 람다 함수가 유일한 내장 함수라는 것을 읽었습니다. 그러나 나는 당신이 적어도 하나의 명령을 추가 할 필요가 있다고 생각했기 때문에 그것이 가능하다는 것을 정말로 이해하지 못합니다. 하나의 변수를 다른 변수로 옮기는 것과 하나를 비교하는 것입니다. 나는 누군가가 나에게 lisp이 그것을 어떻게하는지 설명 할 수 있는지 궁금해했다. 나는 수학자가 아니므로 가능한 경우 복잡한 수학을 사용하지 않고도 설명 할 수 있습니까?lisp에서 람다 함수는 어떻게 작동합니까?

+0

http://cstheory.stackexchange.com/ – zaf

+5

에서 질문하거나 검색하는 것이 더 나을 것 같습니다. "lisp의 땅"이라는 책에서 람다 함수가 유일한 내장 함수라는 것을 읽었습니다. ' 당신이 생각하는 전체 문장 (또는 통행)을 인용 할 수 있습니까? 그 진술은 나에게 꽤 이상하게 보인다. 'lambda'는 함수가 아닙니다. 특별한 형태입니다. 그리고 모든 리스프에는 빌트인 함수가 존재합니다. 사용자가 존재하지 않는다면 (예를 들어 + 함수처럼) 정의 할 수 없습니다. 내가 생각하기에 책에서 언어에 내장 된 ** 함수를 정의하는 유일한 방법은 람다라고 말할 수 있습니다 (예 :'defun'은 람다 위에 만들어진 매크로입니다). – sepp2k

+1

람다 미적분학 (Lambda calculus)은 튜링 (Turing) - 완성 시스템이므로, 모든 것을 할 수 있습니다. 그러나 열심히 평가되는 의미론을 가진 Lisp에서는 - 적어도 거기에 "if"나 비슷한 것이 필요할 것이다. –

답변

3

여기에 혼란스러운 점이 있습니다. lambda은 기능이 아닙니다. 이것은 Lisp 언어에 내장 된 구조입니다.

실용적인 Lisp에는 많은 내장 함수가 있습니다. 리스트를 따로 따로 뽑기 위해서는 적어도 carcdr이 필요하고 다른 함수들에 대해서는 몇몇 기본 연산 함수를 정의 할 수 없다. (*) 또한, setf과 같은 Lisp의 "non-functional"부분은 약간의 프리미티브를 필요로한다. 리스프, 에서

[*] 당신이 할 수있는 Church arithmetic하지만 할 수 있습니다 때문에 리스프의 타입 시스템에하지만 리스프 변종에 따라 제대로 결과를 인쇄 할 수 있는지 여부하지 꽤 인쇄 결과.

+2

교회 인코딩을 모든 용도로 사용하는 경우 자동차 및 CDR이 필요하지 않습니다. 즉, 대신 교회 쌍을 사용할 수 있습니다. –

+0

@ SK-logic : 그렇습니다.하지만 성직자가 인쇄가 불가능하기 때문에 다시는 진짜 Lisp을 가지지 못할 것입니다. –

+4

자신 만의 예쁜 프린터 ("네이티브"Lisp 목록 대신에 교회에서 인코딩 된 목록을 생성하기위한 파서)를 정의 할 수 있습니다. –

5

이것은 이론과 실제 프로그래밍 언어의 차이점입니다.

Lisp는 Lambda Calculus에서 아이디어를 가져 왔지만 구현하지 않았습니다. 람다 계산법은 함수를 사용하여 계산을 수행하는 시스템을 설명합니다. 람다 미적분을 이해하는 것은 유용하지만, Lisp을 사용할 때 순수한 람다 미적분학에서는 프로그래밍하지 않습니다.

프로그래밍 언어로서, Lisp에는 모든 종류의 데이터 유형과 연산 (숫자, 문자열, 문자, 죄수 셀, 기호, 함수 등)이 있습니다.

은 튜링 기계 및 프로그래밍 언어 C. 여기에서 말하는 '리스프의 땅'은 그 lambda없는 무엇

5

같은 것으로 만 리스프 원시적 인 것을 비교, 오히려 그 (알론조 처치의 람다 계산법에 따라 , Lisp은 이론적 토대를 가지고있다) λ 계산법이 Universal Turing Machine과 같기 때문에 lambda으로 나머지 Lisp을 구현할 수있다.

대부분의 실제 응용 프로그램의 경우 익명 기능을 정의하는 데 lambda이 사용됩니다.

+1

이것은이 질문에 대한 가장 좋은 대답 인 것 같습니다. _ 다른 모든 것은 초보자의 머리 위에 있습니다. –

+2

간단한 설명으로 +1하기 – cctan

관련 문제