프로그래밍 언어에서 접두사 연산자는 얼마나 유용합니까?


13

프로그래밍 언어에서 접두사 연산자는 얼마나 유용합니까? 그들이 제공하는 추가 복잡성의 가치가 있습니까? 일반 연산자를 오버로드하여 처리 할 수없는 문제에 대해 고정 연산자가 더 적합한 예제를 제공 할 수 있습니까?


5
리스 퍼 여야합니다. 내가 맞아?
missingfaktor

@missingfaktor : 간신히 사용
Casebash

1
접두사 연산자는 연산자 오버로드와 어떤 관련이 있습니까?
Rein Henrichs

3
널리 사용되는 OO (ish) 언어의 대부분은 메소드 이름에 접두사를 사용한다는 점은 주목할 가치가 있습니다. 실제로 일부 언어는 "정적"메소드를 작성하는 arg1.method(arg2)대신 다음과 같이 작성 method(arg1, arg2)합니다.
Tom Hawtin-tackline

답변:


16

저는 중위 연산자는 수학에서 비롯된 것이라고 생각합니다.

이:

2 + 3 * 4

대부분의 사람들에게 더 읽기 쉽습니다.

(+ 2 (* 3 4))

대부분의 사람들이 수학에 익숙하기 때문입니다.

Haskell에 충분히 관심이 있다면 접두사와 접두사 사이를 이동할 수 있습니다. 이것은 동일한 함수 "(+)"를 사용하고 있습니다 :

(+) 1 2
1 + 2

그리고 이것은 같은 함수 "elem"을 사용하고 있습니다 :

elem 42 [1,2,42]
42 `elem` [1,2,42]

일반 연산자 오버로드는 대부분의 경우를 처리합니다.
Casebash

1
@Casebash : "정상적인"연산자들도 때때로 삽입됩니다.
liori

2
(+ 1 2) 보다 읽기 쉽기 때문에보다 이상해야합니다 1 + 2. 적어도 (+ 1 2 3 4 5)보다 1 + 2 + 3 + 4 + 5.
Joe D

RPN도 있습니다. 요소를 누른 다음 연산자를 누릅니다.
PhiLho

@PhiLho 후위 연산자라고도합니다! 이와 같이 : 1 2 +또는 1 2 3 4 5 +일반적으로 마지막 경우 1 2 + 3 + 4 + 5 +. 실제로 스택 기반 시스템을 완벽하게 모델링한다는 점에서 장점이 있지만, 연산자 우선 순위를 조정하기 위해 괄호가 거의 필요하지 않습니다.
CodexArcanum

6

컴퓨터 언어는 기계가 아닌 사람을 위해 설계되었습니다. 그리고 인간은 접두사 또는 접미사보다 연산자를 더 많이 사용합니다.


6

접두사 연산자의 유일한 실제 이유는 인간이 일반적으로 읽기 쉽다는 것을 알기 때문입니다. 이것은 크게 두 가지 사실 때문입니다.

  • 우리는 어릴 때부터 수학의 형태로 중위 연산자를 배우므로 이에 익숙합니다 2 * 2 = 4.
  • 중위 연산자는 두 개의 인수를 "시각적으로"분리하는 이점이 있습니다. 예 :(some complex expression) + (some other complex expression)

논리적 / 기계적 관점에서, 삽입 연산자는 실제로 어떤 가치도 추가하지 않으며 어떤 경우에는 성가신 것입니다.

  • 항상 두 개의 인수를 사용하여 infix에서 동등한 함수 호출로 변환 할 수 있습니다. 따라서 infix 연산자는 "구문 설탕"을 넘지 않습니다.
  • 두 개 이상의 매개 변수를 사용하려는 경우 접두사가 불편할 수 있습니다. (* 1 2 3 4 5)예를 들어 Lisp에서 숫자 집합을 곱하기에 훨씬 깔끔한 구문 일 것입니다.
  • 구문 분석의 관점에서, 나머지 표현식을 해석하는 방법을 알 수 있도록 먼저 연산자를 먼저 읽는 것이 유용합니다. 접두사 연산자를 사용하면 훨씬 더 복잡 할 수 있습니다 (예 : 스택 또는 어떤 연산자가 어떤 인수에 적용되는지 파악하기 위해 비슷한 것을 유지해야 함)
  • Forth와 같은 스택 기반 / 연속 언어에서는 연산자가 스택에 마지막으로 푸시되어 인수가 올바른 위치에 이미 있어야합니다. 다시 말하지만, 일련의 토큰 중간에 연산자를 묻 으면 문제가 복잡해집니다.
  • 접두사 연산자는 오버로드 될 때 실제로 혼동 될 수 있습니다. 예를 들어 두 개의 HashMap에 적용될 때 "+"는 무엇을 의미합니까? 여기서 의도적으로 의도되지 않은 의미를 쉽게 추측 할 수 있기 때문에 삽입 연산자에 대한 직관적 인 인간 이해는 당신에게 불리합니다.

마지막 주장은 가짜라고 생각합니다. 기호 또는 문자 사용 여부에 관계없이 기능에 적절한 이름을 사용하는 것은 프로그래머의 몫입니다.
Tom Hawtin-tackline

@Tom-프로그래머는 합리적인 이름을 선택해야합니다. 그러나 "현명한"의 핵심 기준 중 하나는 "다른 사람들이 직관적으로 이해할 수 있는가"입니다. -이 경우와 거리가 먼 연산자 과부하가 많은 경우를 보았습니다. 임의의 데이터 유형에 적용될 때 ">> ="의 의미에 대한 누군가의 비틀 거리는 정의를 리버스 엔지니어링하고 싶지 않습니다. 올바른 기능 이름을 입력하십시오!
mikera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.