ti-enxame.com

Quais linguagens de programação não usam precedência de operador além das linguagens como LISP?

E o que você acha das precedências dos operadores? Seria mais difícil programar em uma linguagem onde as operações são executadas em ordem sequencial?

Ex.:

2 + 3 * 4 == 20

2 + (3 * 4) == 14

Ok, a família LISP não tem precedências por definição. Vamos falar sobre linguagens procedurais e orientadas a objetos usando este "recurso".

6
Maniero

Conversa fiada.

Tudo é feito com o envio de mensagens, então 1 + 2 * 3 Significa "enviar * com parâmetro 3 para o objeto retornado enviando a mensagem + com parâmetro 2 para o objeto 1".

Isso confunde as pessoas (me confundiu) por causa de como geralmente escrevemos matemática, mas como nunca consigo me lembrar da precedência do operador C, lido da mesma maneira em ambas as línguas - uso () s para agrupar termos: 1 + (2 * 3).

17
Frank Shearar

Adiante

É (quase) toda notação RPN, portanto, nenhuma regra de precedência é necessária. Eu apostaria que a maioria das linguagens usando postfix ou notação de prefixo (PostScript, LISP ...) funcionaria da mesma forma.

8
Shog9

As linguagens do tipo LISP não precisam de precedência porque as expressões estão totalmente entre parênteses. Não há necessidade de precedência para avaliar

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

Eu conheço J, e acredito que seja um parente próximo K (junto com sua linguagem mãe, APL, conforme observado por @Jerry Coffin), avalia tudo da direita para a esquerda sem precedência.

6
Hoa Long Tam

APL não tem precedência. Se não me falha a memória, tudo está agrupado da direita para a esquerda.

Estranhamente, pelo menos no sentido oficial, nem C nem C++ têm precedência de operador. O padrão não foi escrito dessa forma, embora (é claro) seja principalmente uma maneira diferente de dizer a mesma coisa que ter precedência. OTOH, é apenas principalmente a mesma coisa - no final das contas, não há como escrever uma tabela de precedência para C ou C++ e fazer tudo certo. Existem algumas coisas que simplesmente não cabem.

5
Jerry Coffin

Prolog.

Bem, meio que. Existem operadores padrão, com precedência padrão ... mas você pode definir operadores trivialmente com predência arbitrária, porque 1 + 2 É realmente o objetivo +(1, 2).

Você pode definir operadores infixo (1 + 2), Prefixo (++X) E pós-fixos (X++), Com associatividade arbitrária (esquerda, direita ou ambos).

4
Frank Shearar