나는 Land of Lisp에서 람다 함수가 유일한 내장 함수라는 것을 읽었습니다. 그러나 나는 당신이 적어도 하나의 명령을 추가 할 필요가 있다고 생각했기 때문에 그것이 가능하다는 것을 정말로 이해하지 못합니다. 하나의 변수를 다른 변수로 옮기는 것과 하나를 비교하는 것입니다. 나는 누군가가 나에게 lisp이 그것을 어떻게하는지 설명 할 수 있는지 궁금해했다. 나는 수학자가 아니므로 가능한 경우 복잡한 수학을 사용하지 않고도 설명 할 수 있습니까?lisp에서 람다 함수는 어떻게 작동합니까?
답변
여기에 혼란스러운 점이 있습니다. lambda
은 기능이 아닙니다. 이것은 Lisp 언어에 내장 된 구조입니다.
실용적인 Lisp에는 많은 내장 함수가 있습니다. 리스트를 따로 따로 뽑기 위해서는 적어도 car
과 cdr
이 필요하고 다른 함수들에 대해서는 몇몇 기본 연산 함수를 정의 할 수 없다. (*) 또한, setf
과 같은 Lisp의 "non-functional"부분은 약간의 프리미티브를 필요로한다. 리스프, 에서
[*] 당신이 할 수있는 Church arithmetic하지만 할 수 있습니다 때문에 리스프의 타입 시스템에하지만 리스프 변종에 따라 제대로 결과를 인쇄 할 수 있는지 여부하지 꽤 인쇄 결과.
교회 인코딩을 모든 용도로 사용하는 경우 자동차 및 CDR이 필요하지 않습니다. 즉, 대신 교회 쌍을 사용할 수 있습니다. –
@ SK-logic : 그렇습니다.하지만 성직자가 인쇄가 불가능하기 때문에 다시는 진짜 Lisp을 가지지 못할 것입니다. –
자신 만의 예쁜 프린터 ("네이티브"Lisp 목록 대신에 교회에서 인코딩 된 목록을 생성하기위한 파서)를 정의 할 수 있습니다. –
이것은 이론과 실제 프로그래밍 언어의 차이점입니다.
Lisp는 Lambda Calculus에서 아이디어를 가져 왔지만 구현하지 않았습니다. 람다 계산법은 함수를 사용하여 계산을 수행하는 시스템을 설명합니다. 람다 미적분을 이해하는 것은 유용하지만, Lisp을 사용할 때 순수한 람다 미적분학에서는 프로그래밍하지 않습니다.
프로그래밍 언어로서, Lisp에는 모든 종류의 데이터 유형과 연산 (숫자, 문자열, 문자, 죄수 셀, 기호, 함수 등)이 있습니다.
은 튜링 기계 및 프로그래밍 언어 C. 여기에서 말하는 '리스프의 땅'은 그lambda
없는 무엇
같은 것으로 만 리스프 원시적 인 것을 비교, 오히려 그 (알론조 처치의 람다 계산법에 따라 , Lisp은 이론적 토대를 가지고있다) λ 계산법이 Universal Turing Machine과 같기 때문에 lambda
으로 나머지 Lisp을 구현할 수있다.
대부분의 실제 응용 프로그램의 경우 익명 기능을 정의하는 데 lambda
이 사용됩니다.
이것은이 질문에 대한 가장 좋은 대답 인 것 같습니다. _ 다른 모든 것은 초보자의 머리 위에 있습니다. –
간단한 설명으로 +1하기 – cctan
- 1. 람다 식은 어떻게 내부적으로 작동합니까?
- 2. 토큰의 probe() 함수는 어떻게 작동합니까?
- 3. 이 재귀 함수는 어떻게 작동합니까?
- 4. 파이썬의 범위 함수는 어떻게 작동합니까?
- 5. jQuery의 noConflict 함수는 어떻게 작동합니까?
- 6. jQuery pushStack 함수는 어떻게 작동합니까?
- 7. PHP에서 eval 함수는 어떻게 작동합니까?
- 8. 이 콜백 함수는 어떻게 작동합니까?
- 9. 간단한 부스트 :: 람다 함수는 어떻게 만듭니 까?
- 10. len 함수는 실제로 파일에서 어떻게 작동합니까?
- 11. Perl의 grep 함수는 정규식에서 어떻게 작동합니까?
- 12. 자이 썬에서 max() 함수는 어떻게 작동합니까?
- 13. 하이브 : string이 NULL이면 변환 함수는 어떻게 작동합니까?
- 14. recv 함수는 어떻게 작동합니까? -winsock functions-
- 15. HTML :: TreeBuilder의 "parent"함수는 정확히 어떻게 작동합니까?
- 16. Scheme 함수는 정확하지 않으면 어떻게 작동합니까?
- 17. 코코아의 쓸모없는 CGSCStringValue 함수는 실제로 어떻게 작동합니까?
- 18. jquery 함수는 한 번만 작동합니까?
- 19. Lisp에서 + 함수는 실제로 얼마나 많은 입력을 가질 수 있습니까?
- 20. 교차 엔트로피 오류 함수는 일반적인 역 전파 알고리즘에서 어떻게 작동합니까?
- 21. 이 Objective-C 코드에서 다음 trig 함수는 어떻게 작동합니까?
- 22. 루프 (다른 함수를 반환)의 함수는 어떻게 작동합니까?
- 23. 다차원 배열에 대해 사용자 지정 정렬 함수는 어떻게 작동합니까?
- 24. KMP 알고리즘에 사용 된 실패 함수는 어떻게 작동합니까?
- 25. PHP의 '메일'은 어떻게 작동합니까?
- 26. java의 fileWriter() 함수는 Linux 유형의 시스템에서 작동합니까?
- 27. PHP checkdnsrr 함수는 닷컴 도메인에서만 작동합니까?
- 28. 함수는 URL을 수동으로 호출 할 때만 작동합니까?
- 29. 어떻게 람다 식으로 계산합니까?
- 30. 어떻게 람다 이벤트 핸들러에게
http://cstheory.stackexchange.com/ – zaf
에서 질문하거나 검색하는 것이 더 나을 것 같습니다. "lisp의 땅"이라는 책에서 람다 함수가 유일한 내장 함수라는 것을 읽었습니다. ' 당신이 생각하는 전체 문장 (또는 통행)을 인용 할 수 있습니까? 그 진술은 나에게 꽤 이상하게 보인다. 'lambda'는 함수가 아닙니다. 특별한 형태입니다. 그리고 모든 리스프에는 빌트인 함수가 존재합니다. 사용자가 존재하지 않는다면 (예를 들어 + 함수처럼) 정의 할 수 없습니다. 내가 생각하기에 책에서 언어에 내장 된 ** 함수를 정의하는 유일한 방법은 람다라고 말할 수 있습니다 (예 :'defun'은 람다 위에 만들어진 매크로입니다). – sepp2k
람다 미적분학 (Lambda calculus)은 튜링 (Turing) - 완성 시스템이므로, 모든 것을 할 수 있습니다. 그러나 열심히 평가되는 의미론을 가진 Lisp에서는 - 적어도 거기에 "if"나 비슷한 것이 필요할 것이다. –