Lisp-1과 Lisp-2의 차이점은 무엇입니까?


94

Lisp-1과 Lisp-2의 차이점과 이것이 Clojure와 어떻게 관련되는지 이해하려고 노력했지만 여전히 제대로 이해하지 못합니다. 누구든지 나를 깨달을 수 있습니까?

답변:


68

wikipedia 에 따르면 :

함수에 대한 별도의 네임 스페이스가 이점인지 여부는 Lisp 커뮤니티에서 경합의 원천입니다. 일반적으로 Lisp-1 대 Lisp-2 논쟁이라고합니다. Lisp-1은 Scheme의 모델을, Lisp-2는 Common Lisp의 모델을 나타냅니다.

기본적으로 변수와 함수가 충돌없이 동일한 이름을 가질 수 있는지 여부에 관한 것입니다. Clojure는 Lisp-1 로 함수와 변수에 동일한 이름을 동시에 사용할 수 없습니다.


11
Lisp-2가 같은 이름의 함수와 변수를 갖는 것이 더 혼란스럽지 않습니까?
appshare.co 2011 년

39
그 이유의 일부는 Lisp-2 방언을 사용하는 프로그래머가 동일한 이름을 가진 함수와 변수를 가지지 않기 때문입니다. list함수 매개 변수로 자주 사용되며 아무것도 사용하지 않습니다. OMG (list ...)는 표준 함수 이기 때문에 매우 혼란 스럽습니다 . list변수로있는 많은 함수는 함수를 사용 list하지 않거나 해당 변수 근처에서 사용하지 않습니다. 그런 일이 발생하더라도 그렇게 나쁘지 않습니다 : (list foo list). 이것은 같은 단어가 명사와 동사로 나타나는 "좋은 싸움과 싸워라"와 같은 문장보다 더 혼란스럽지 않습니다.
카즈

5
@Zubair Java에는 훨씬 더 많은 네임 스페이스가 있습니다. 동일한 이름으로 클래스, 메서드 및 변수를 정의 할 수 있습니다.

19
니모닉으로서 Lisp 1은 1 개의 네임 스페이스를, Lisp 2는 2 개의 네임 스페이스 (하나는 함수용, 다른 하나는 변수 용)를 가지고 있다고 생각합니다.
Nick McCurdy 2017

4
@NickMcCurdy 니모닉으로서 자전거는 두 개의 바퀴가 있고 세발 자전거는 세 개가 있다고 생각합니다.
Kaz

71

Richard Gabriel 이 작성한 이 문서 를 읽고 싶을 것 입니다. Lisp 커뮤니티가 Lisp1 대 Lisp2에서 논의한 문제를 요약 한 것입니다. 처음 몇 섹션에서는 약간 조밀하고 느리게 이동하지만 섹션 5를 지나면 읽기가 훨씬 쉽습니다.

기본적으로 Lisp1에는 기호를 값에 매핑하는 단일 환경이 있으며 이러한 값은 "일반"또는 함수일 수 있습니다. Lisp2에는 (적어도) 두 개의 네임 스페이스가 있습니다 (기호에는 함수 값에 대한 슬롯과 일반 값에 대한 슬롯이 하나씩 있음). 따라서 Lisp2에서는 foo라는 함수와 foo라는 값을 가질 수 있지만 Lisp1에서는 foo라는 이름이 단일 값 (함수 또는 기타) 만 참조 할 수 있습니다.

둘 사이에는 몇 가지 장단점과 맛의 차이가 있지만 자세한 내용은 논문을 읽으십시오. Christian Queinnec의 저서 "Lisp in Small Pieces"도 본문을 통해 짜여진 차이점에 대해 논의하고 있습니다.


7
Gabriel 논문의 더 불가사의 한 섹션 중 하나는 Multiprocessing에 대한 섹션 11입니다. 이 섹션에서 그는 Lisp1이 프로그래밍의 기능적 스타일에 더 도움이되므로 다중 처리에 더 도움이된다고 암시합니다. 분명히 이것은 Clojure에서 관심이 있습니다. 그러나 Lisp1이 FP에 더 도움이되는 이유를 잘 모르겠습니다. 누구든지 이것에 대한 통찰력이 있습니까?
Peter McLain 2011 년

40
FP의 주요 포인트는 최고 수준의 값으로 치료 기능에 아마 때문에, 따라서 다른 모든 값과 같은 방법으로 그들을 치료하는 것이 훨씬 더 편리하고 개념적으로 청소기입니다
mikera

10
@PeterMcLain Lisp-1 방언 사용자가 Lisp-1이 함수형 프로그래밍에 더 전도성이 있다고 말하면 코드 funcallfunction연산자로 가득 찬 코드를 채울 필요가 없다는 의미입니다 . 이들은 Lisp-1에서 사라집니다.
Kaz

3
Schemer가 Lisp를 작성하려고 할 때 발생하는 예 : emacs.stackexchange.com/q/28979/2787
ceving

2
Lisp-2에 대해 "적어도"라는 문구를 사용했습니다. 두 경우의 간단한 차이점은 심볼이 s- 표현식의 헤드 위치에 있는지 여부입니다 (그렇다면 함수 네임 스페이스에서 조회하고 변수 네임 스페이스에서 조회). 이 두 가지 사례 외에 다른 사례를 몇 가지 줄 수 있습니까?
다니엘 Dinnyes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.