람다 언어는 무엇입니까?
필자는 "JavaScript : The Good Parts"를 읽고 있었는데 저자는 JavaScript가 출시 될 람다 언어 중 첫 번째라고 언급했습니다.
JavaScript의 함수는 (대부분) 어휘 범위가있는 일급 객체입니다. JavaScript는 주류 가 된 최초의 람다 언어 입니다. 깊은 곳에서 JavaScript는 Java보다 Lisp 및 Scheme과 더 많은 공통점이 있습니다. C의 옷을 입은 Lisp입니다. 이로 인해 JavaScript는 매우 강력한 언어입니다.
나는 람다 언어가 무엇인지 이해하지 못했습니다. 이러한 언어의 속성은 무엇이며 Java, C, C ++ 및 Php와 같은 언어와 어떻게 다릅니 까?
나는 누구도 "람다 언어"라는 용어를 사용하는 것을 들어 본 적이 없으며, 내가 생각할 수있는 유일한 그럴듯한 정의는 자바 스크립트를 "최초"로 배제하는 것입니다.
즉, 다음 중 하나를 의미 할 수 있습니다.
- 기능적 언어 : 계산이 (아마도 고차) 함수의 상태 비 저장 구성으로 모델링되거나 모델링 될 수있는 언어 클래스입니다. LISP, Scheme, ML, Haskell 등은 자주이 클래스에 속하지만 이들 중 일부는 더 적절하게 혼합 된 패러다임 또는 "기능적 선택적"언어입니다. 자바 스크립트는 프로그래밍의 "기능적 스타일"을 가능하게하는 데 필요한 기능을 포함하고있을 것입니다.
- 익명 함수의 생성을 허용하는 언어 (
function
JavaScript 의 구문 사용 . 이것은lambda
많은 언어로 작성 되므로 "람다 언어"일 수 있음).
두 가지 사용 모두 람다 미적분에서 함수 추상화를 나타내는 그리스 문자 람다의 사용에서 파생되었으며, Alonzo 교회가 고안 한 계산 모델이며 함수 프로그래밍의 기반이됩니다.
편집 : Google 도서 검색 결과 --- "첫 번째 주류로 이동"; 글쎄, 그것은 논쟁의 여지가 있습니다. 나는 LISP가 적어도 합리적으로 주류 였다고 주장했습니다. 그래도 JavaScript의 의미 체계는 Scheme에서 직접 영감을 받았으며 유사한 주장을 할 수있는 다른 언어보다 더 많은 청중에게 확실히 도달했습니다.
간단히 말해서 람다 언어는 함수를 다른 함수로 전달할 수있는 언어입니다. 여기서 함수는 다른 변수로 처리됩니다. 또한 익명으로 (또는 인라인으로) 전달되도록이 함수를 정의 할 수 있어야합니다. PHP 5.3은 람다 함수에 대한 지원을 추가했습니다. JavaScript가 최초의 주류 언어였습니까? Lisp는 JavaScript 이전의 교육 환경에서 널리 사용되었으며 우리가 사랑하는 Emacs http://www.gnu.org/software/emacs/manual/html_node/eintr/ 을 사용자 정의하는 데에도 사용되었습니다 .
여기에 예가 있습니다.
function applyOperation(a, b, operation) {
return operation(a,b);
}
function add(a,b) { return a+ b; }
function subtract(a,b) {return a - b;}
// Can be called like
applyOperation(1,2, add);
applyOperation(4,5, subtract);
// Anonymous inline function
applyOperation(4,7, function(a,b) {return a * b})
C와 어떻게 다른가요? C에서는 함수에 대한 포인터를 전달할 수 있지만 익명으로 인라인으로 정의 할 수는 없습니다.
Java (버전 8 이전)에서 동일한 효과를 얻으려면 실제로 익명으로 인라인으로 정의 할 수있는 인터페이스를 구현하는 객체를 전달해야합니다.
그는 Lambda 미적분을 언급합니다 .
λ-calculus라고도하는 Lambda 미적분은 함수 정의, 함수 적용 및 재귀를위한 공식 시스템입니다. [...]
[...] 형식화되지 않은 람다 미적분은 함수형 프로그래밍, 특히 Lisp에 대한 원래 영감이되었으며, 최신 형식 시스템의 기초 역할을하는 형식화 된 람다 미적분입니다.
익명 함수와 함수에 대한 참조로 정의 된 람다를 보았습니다. Javascript는 다음을 모두 지원합니다.
setTimeout(function(){ /* an anonymous function */ }, 100)
var f = function(){ /* function ref */ }
이것은 JS가 많은 힘과 유연성을 얻는 곳입니다. Java는 첫 번째 (익명 인터페이스 구현)를 어느 정도 지원
하지만 후자는 지원하지 않습니다
. Java 8에 대한 업데이트는 아래를 참조하십시오.
이것들 중 어느 (또는 둘 다)이 람다의 적절한 정의인지 나에게는 불분명합니다.
JS is definitely not the first language to support these features. Going from memory, I think its smalltalk that language enthusiasts always rave about supporting lambdas.
BTW: In Java, an anonymous class is usually used to pass in a class definition on the fly for an argument (used a lot in swing). Something like this (from memory, not compiled):
someGuiContainer(new WidgetInterface()
{
public void importantMethodToDefine(){
// Handle having the method called in my special widget way
}
}
)
Update
Java, as of 8, is now officially a Lambda language.
You can now use the following syntax:
MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
In MIT's open course-ware called structure and interpretation of computer programs a book by Hal Abelson's, Jerry Sussman's and Julie Sussman's. They discuss Scheme, which is a dialect of LISP and there they explain a very detailed and clear explanation of what lambda is and Scheme LISP and languages in general. I highly recommend you look at it if you wish to have a really clear and deep understanding of Computer Programming. To explain to you would take three times as much time as if you went there and just read the book or watch the tutorials which explains it perfectly, it's genius.
Javascript is mainly based off of the language Scheme and it's Lisp father, and in addition it took its lamda structure and went mainstream with it.
From wikipedia: In programming languages such as Lisp and Python, lambda is an operator used to denote anonymous functions or closures, following the usage of lambda calculus. An example of this use of lambda in the Python language is this section of computer code that sorts a list alphabetically by the last character of each entry:
>>> list = ['woman', 'man', 'horse', 'boat', 'plane', 'dog']
>>> sorted(list, key=lambda word: word[-1])
['horse', 'plane', 'dog', 'woman', 'man', 'boat']
* In the C# programming language a lambda expression is an anonymous function that can contain expressions and statements
JavaScript allows to define Anonymous function that is a function which is not bound to an identifier. Such function is also known as Lambda Abstraction and since JS support this it is known as Lambda Language.
Properties : This function are needed in case of immediate execution of a function or for short term use, where there is no significance of giving name to function.
It is different from languages like Java, C, C++ and PHP as in JS Anonymous functions are used for Closure and Currying.
참고URL : https://stackoverflow.com/questions/3865335/what-is-a-lambda-language
'IT story' 카테고리의 다른 글
맵 인스턴스를 삭제하는 올바른 방법은 무엇입니까? (0) | 2020.09.14 |
---|---|
Redux와 반응합니까? (0) | 2020.09.14 |
CSS에서 글꼴 패밀리 이름을 따옴표로 묶어야합니까? (0) | 2020.09.14 |
.NET 그래프 라이브러리 주변? (0) | 2020.09.14 |
Java에서 리소스, URI, URL, 경로 및 파일의 차이점은 무엇입니까? (0) | 2020.09.14 |