접두사 표기법으로 내 마음을 감싸고 있습니까?


10

LISP에 대해 읽고 있습니다.

접두사 표기법이 특정 수준에서 어떻게 작동하는지 이해하지만 직관적으로 만드는 데 어떤 트릭이 있는지 궁금합니다.


6
연습과는 별도로?

사용자 RPL은 내가 가장 좋아하는 LISP의 맛입니다. 괄호도 없습니다! en.wikipedia.org/wiki/RPL_(programming_language) HP 50g를 사용하지 못합니다 :-(
Robbie

처음에는 직관적이지 않은 것처럼 보였지만 이제는 훌륭하다고 생각하며 대부분 읽었습니다. 그것은 실제로 우리가 말하는 방식입니다 : "...의 합, ..." 은 다른 종류의 읽기가 필요합니다. 이제 연산자를 한 줄로 읽는 대신 모든 인수에 적용하면됩니다.
Mark C

접두사 표기법에 어떤 문제가 있습니까? 거의 모든 언어에서 사용하고 있습니다. 함수 호출은 거의 항상 접두사입니다.
SK-logic

실제로는 아닙니다. "직관적 인"은 20 년 이상 수학 규칙의 형태로 학습했기 때문에 직관적입니다. LISP와 다른 언어들만이이 관습을 사용하기 때문에, 당신은 여전히 ​​다른 언어를 훨씬 더 배우게 될 것입니다. 그리고 우리는 여기서 간단한 표현에 대해서만 이야기하고 있습니다. (2 + 3 ... 어떻게 "페이지 절반"라이너를 사용 하시겠습니까? :)
Rook

답변:


6

올바른 동사를 사용하여 구어가 도움이 될 수 있으므로 왼쪽에서 오른쪽으로 읽는 것이 좋습니다. 예를 들어 (+ 3 2)는 "add three and two"일 수 있습니다. 보다 일반적인 경우에는 "$ operands에서 $ operation 수행"이라고 말할 수 있습니다. 같은 경우에 적용됩니다 : "3과 2에 대해 추가 작업을 수행하십시오".


당신은 무엇 할 것 ( = 1 2 )( > 4 2 )
비비안 강

3
수사적인 질문을 사용합니다. :) 같습니까? (What?), "1 and 2! (Erm ... No ...)
Arafangion

@RiceFlour (이봐, 나는 밀가루로 만든 음식을 먹고 자랐다. 글루텐 문제가있다.) 나는 "하나는 두 개입니까?"또는 "다음은 같습니까?"라고 읽습니다. 크거나 작음 연산자는 접두사 형태가 그리 자연스럽지 않지만 Lisp 코드에서 얼마나 자주 사용되는지 궁금합니다.
Mark C

7

트릭? 무엇 때문에?

멘탈 파서는 익숙하지 않기 때문에 아직 직관적이지 않습니다. 그냥 사용하고 반복해서 읽는다면 더 나아질 것입니다.


난 읽지 않은 그것의 많은,하지만 지금은 멋진 생각합니다. 내 뇌는 괄호에 대해 거의 "촉각 적"감각을 갖기 시작한 것 같습니다. 나는 그 느낌이 더 예리 해 질 것이라고 생각합니다.
Mark C

5

이를 일종의 함수 호출로 생각할 수 있습니다.

(operator operand1 operand2 ...)

그것에 대해 특별한 것은 없습니다. C ++에서 연산자를 오버로드하는 경우 (그리고이를 허용하는 다른 많은 언어) 종종 이런 종류의 함수를 정확하게 그렇게 정의해야합니다.

MyClass operator+(MyClass const& x, MyClass const& y);

그래, 이것이 내가하는 방법입니다. 뒤로 물러서서 Java, C # 등의 메소드 호출을 살펴보면 실제로 약간 다른 위치에 괄호가 붙은 접두사 표기법 인 MyMethod (arg1, arg2)입니다.
nlawalker

4

많은 언어에서 접두사, 접두사 및 접미사를 혼합하여 사용합니다.

Lisp는 기본적으로 접두사 만 사용합니다. sin (x)가 수학에서 직관적이라면 (sin x)는 멀지 않습니다. 이동 (dog, home)이 전통적인 프로 시저 호출 인 경우 Lisp에서는 그냥 이동합니다 (dog dog 이동).

Lisp는 수학에 예외를 두지 않으며 +,-, * 및 기타를 일반 함수 호출과 같이 취급합니다.


2

(결국) "모든 것이 함수 호출"(또는 "함수 호출"의 표면 구문을 가진 특수한 형태 또는 매크로 확장)을 클릭했을 때, 그것은 매우 자연스러운 느낌이었습니다.

그래서 (= 1 2)나는 '1과 2의 숫자와 같은 숫자를 부르십시오'라고 읽었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.