lisp - 하스켈 - 함수형 프로그래밍 나무 위키




Scheme과 Common Lisp의 실제 차이점은 무엇입니까?(또는 Lisp의 다른 두 개의 방언) (3)

참고 : 나는 배울 것을 요구하지 않고 어떤 것이 더 낫지 않습니까?

SICP의 무료 버전을 읽었습니다 (좋은 이야기를 들었습니다. 프로그래밍에 관심이 많았습니다).

나는 Scheme이 Lisp의 방언이고 나는 Schem와 Common Lisp 사이의 실제 차이점이 무엇인지 궁금해했다.

'CL에는 더 큰 stdlib가 있습니다. Scheme은 실제 프로그래밍에 좋지 않습니다.'하지만 실제 내용은 '이것이 CL / this가 있기 때문에'라고 말하지 않습니다.


계획:

  • orginally 거의 사양 (새로운 R7RS가 무거워 보인다)
  • 쉬운 구문으로 인해 체계가 빨리 배울 수 있습니다.
  • 구현은 추가 기능을 제공하지만 구현마다 이름이 다를 수 있습니다.

공통 리스프 :

  • 많은 기능들이 더 큰 명세에 의해 정의됩니다.
  • 함수와 변수를위한 다른 네임 스페이스 (lisp-2)

그 점이 몇 가지 있습니다. 확실히 더 많은 것이 있습니다. 나는 지금 기억하지 않습니다.


몇 가지 기본적인 실제적인 차이점 :

  • Common Lisp에는 변수와 함수에 대한 별도의 범위가 있습니다. Scheme에는 하나의 범위가 있습니다. 함수는 값이고 특정 이름을 가진 함수를 정의하는 것은 람다에 설정된 변수를 정의하는 것입니다. 결과적으로 Scheme에서 함수 이름을 변수로 사용하여이를 다른 함수에 저장하거나 전달한 다음 해당 변수가 함수 인 것처럼 호출 할 수 있습니다. 그러나 Common Lisp에서는 (function ...) 사용하여 함수를 명시 적으로 값으로 변환하고 명시 적으로 (funcall ...) 사용하여 값에 저장된 함수를 호출해야합니다 (funcall ...)
  • Common Lisp에서 nil (빈 목록)은 false (예 : if )로 간주되며 유일한 거짓 값입니다. Scheme에서 빈 목록은 true로 간주되고 #f 는 유일한 거짓 값입니다.

이는 많은 LISP 사람들이 Scheme을 LISP로 분류하기 때문에 공평하게 대답하는 것이 어려운 질문입니다.

Josh Bloch (그리고이 비유는 그의 발명품이 아닐 수도 있습니다)는 언어를 현지 술집을 선택하는 것과 비슷한 것으로 선택하는 것을 설명합니다. 그 빛에, 다음 :

"Scheme"펍에는 많은 프로그래밍 언어 연구원이 있습니다. 이 사람들은 언어의 의미에 대해 많은 관심을 기울이고 잘 정의되고 단순하게 유지하며 혁신적인 새로운 기능에 대해 논의합니다. 누구나 자신 만의 언어 버전을 가지므로 자신 만의 프로그래밍 언어 코너를 탐색 할 수 있습니다. Scheme 사람들은 LISP에서 취한 괄호로 묶인 문법을 정말로 좋아합니다. 유연하고 가볍고 균일하며 언어 확장에 대한 많은 장벽을 제거합니다.

"LISP"술집? 글쎄 ... 나는 코멘트해서는 안된다. 나는 충분한 시간을 거기에서 보내지 않고 있었다.