it-swarm-es.com

¿Qué lenguajes de programación no usan precedencia de operador además de los lenguajes similares a LISP?

¿Y qué opinas de las precedencias de operadores? ¿Sería más difícil programar en un lenguaje donde las operaciones se ejecutan en orden secuencial?

Ex.:

2 + 3 * 4 == 20

2 + (3 * 4) == 14

Ok, la familia LISP no tiene precedentes por definición. Vamos a hablar de lenguajes procedimentales y orientados a objetos usando esta "característica".

6
Maniero

Charla.

Todo se hace con el envío de mensajes, entonces 1 + 2 * 3 Significa "enviar * con el parámetro 3 al objeto devuelto enviando el mensaje + con el parámetro 2 al objeto 1".

Eso arroja a la gente (me confundió) debido a la forma en que solemos escribir matemáticas, pero como nunca puedo recordar la precedencia del operador de C, lo hago de la misma manera en ambos idiomas: uso () s para agrupar términos: 1 + (2 * 3).

17
Frank Shearar

Adelante

Es (casi) toda la notación RPN, por lo que no se necesitan reglas de precedencia. Apostaría a que la mayoría de los lenguajes que usan notación de prefijo o sufijo (PostScript, LISP ...) funcionarían igual.

8
Shog9

Los lenguajes de tipo LISP no necesitan precedencia porque las expresiones están completamente entre paréntesis. No hay necesidad de precedencia para evaluar

(sqrt (expt (- x1 x2) 2)
      (expt (- y1 y2) 2))

Conozco J, y creo que es un pariente cercano K (junto con su idioma principal, APL, como lo señaló @Jerry Coffin), evalúa todo de derecha a izquierda sin precedencia.

6
Hoa Long Tam

APL no tiene precedencia. Si la memoria no me falla, todo se agrupa de derecha a izquierda.

Curiosamente, al menos en un sentido oficial, ni C ni C++ tienen precedencia de operador. El estándar no está escrito de esa manera, aunque (por supuesto) es principalmente una forma diferente de decir lo mismo que tener precedencia. OTOH, es solo en su mayoría lo mismo - en última instancia, no hay forma de escribir una tabla de precedencia para C o C++ y hacer que todo esté bien. Hay algunas cosas que simplemente no encajan del todo.

5
Jerry Coffin

Prólogo.

Bueno, bueno. Hay operadores estándar, con precedencia estándar ... pero puedes definir operadores trivialmente con predeceso arbitrario, porque 1 + 2 Es realmente el objetivo +(1, 2).

Puede definir operadores de infijo (1 + 2), Prefijo (++X) Y sufijo (X++), Con asociatividad arbitraria (izquierda, derecha o ambos).

4
Frank Shearar