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


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.