Quais linguagens de programação não usam precedência de operador além de linguagens semelhantes a Lisp? [fechadas]

4

E o que você acha das precedências do operador? Seria uma programação mais difícil em um idioma onde as operações são executadas em ordem seqüencial?

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 esse "recurso".

    
por Maniero 14.09.2010 / 04:16
fonte

5 respostas

16

Smalltalk.

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

Isso joga as pessoas (isso me jogou) por causa de como costumamos escrever matemática, mas como eu nunca consigo lembrar a precedência do operador de C, eu lido da mesma maneira em ambos os idiomas - eu uso () s para termos de grupo: 1 + (2 * 3) .

    
por 15.09.2010 / 08:12
fonte
8

adiante

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

    
por 14.09.2010 / 05:43
fonte
6

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

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

Eu sei J, e acredito que seja um parente próximo do K (junto com o idioma dos pais, APL, como observado por @Jerry Coffin), avalie tudo da direita para a esquerda sem precedentes.

    
por 14.09.2010 / 10:15
fonte
5

O APL não tem precedência. Se a memória serve, tudo é agrupado da direita para a esquerda.

Estranhamente, pelo menos em um sentido oficial, nem C nem C ++ têm precedência de operador. O padrão não é escrito dessa maneira, 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 obter tudo certo. Existem algumas coisas que simplesmente não se encaixam bem.

    
por 14.09.2010 / 06:13
fonte
4

Prolog.

Bem, amável. Existem operadores padrão, com precedência padrão ... mas você pode definir operadores com predição arbitrária, porque 1 + 2 é realmente a meta +(1, 2) .

Você pode definir operadores de infixo ( 1 + 2 ), prefixo ( ++X ) e postfix ( X++ ), com associação arbitrária (esquerda, direita ou ambas).

    
por 15.09.2010 / 08:21
fonte