Lisp-1과 Lisp-2의 차이점과 이것이 Clojure와 어떻게 관련되는지 이해하려고 노력했지만 여전히 제대로 이해하지 못합니다. 누구든지 나를 깨달을 수 있습니까?
Lisp-1과 Lisp-2의 차이점과 이것이 Clojure와 어떻게 관련되는지 이해하려고 노력했지만 여전히 제대로 이해하지 못합니다. 누구든지 나를 깨달을 수 있습니까?
답변:
wikipedia 에 따르면 :
함수에 대한 별도의 네임 스페이스가 이점인지 여부는 Lisp 커뮤니티에서 경합의 원천입니다. 일반적으로 Lisp-1 대 Lisp-2 논쟁이라고합니다. Lisp-1은 Scheme의 모델을, Lisp-2는 Common Lisp의 모델을 나타냅니다.
기본적으로 변수와 함수가 충돌없이 동일한 이름을 가질 수 있는지 여부에 관한 것입니다. Clojure는 Lisp-1 로 함수와 변수에 동일한 이름을 동시에 사용할 수 없습니다.
list
함수 매개 변수로 자주 사용되며 아무것도 사용하지 않습니다. OMG (list ...)
는 표준 함수 이기 때문에 매우 혼란 스럽습니다 . list
변수로있는 많은 함수는 함수를 사용 list
하지 않거나 해당 변수 근처에서 사용하지 않습니다. 그런 일이 발생하더라도 그렇게 나쁘지 않습니다 : (list foo list)
. 이것은 같은 단어가 명사와 동사로 나타나는 "좋은 싸움과 싸워라"와 같은 문장보다 더 혼란스럽지 않습니다.
Richard Gabriel 이 작성한 이 문서 를 읽고 싶을 것 입니다. Lisp 커뮤니티가 Lisp1 대 Lisp2에서 논의한 문제를 요약 한 것입니다. 처음 몇 섹션에서는 약간 조밀하고 느리게 이동하지만 섹션 5를 지나면 읽기가 훨씬 쉽습니다.
기본적으로 Lisp1에는 기호를 값에 매핑하는 단일 환경이 있으며 이러한 값은 "일반"또는 함수일 수 있습니다. Lisp2에는 (적어도) 두 개의 네임 스페이스가 있습니다 (기호에는 함수 값에 대한 슬롯과 일반 값에 대한 슬롯이 하나씩 있음). 따라서 Lisp2에서는 foo라는 함수와 foo라는 값을 가질 수 있지만 Lisp1에서는 foo라는 이름이 단일 값 (함수 또는 기타) 만 참조 할 수 있습니다.
둘 사이에는 몇 가지 장단점과 맛의 차이가 있지만 자세한 내용은 논문을 읽으십시오. Christian Queinnec의 저서 "Lisp in Small Pieces"도 본문을 통해 짜여진 차이점에 대해 논의하고 있습니다.
funcall
와 function
연산자로 가득 찬 코드를 채울 필요가 없다는 의미입니다 . 이들은 Lisp-1에서 사라집니다.