Quali linguaggi di programmazione non utilizzano la precedenza degli operatori oltre a quelle di Lisp? [chiuso]

4

E cosa ne pensi delle precedenze degli operatori? Sarebbe più difficile programmare in una lingua in cui le operazioni sono eseguite in ordine sequenziale?

Esempio:.

2 + 3 * 4 == 20

2 + (3 * 4) == 14

Ok, la famiglia Lisp non ha precedenti per definizione. Parliamo di linguaggi procedurali e orientati agli oggetti usando questa "funzione".

    
posta Maniero 14.09.2010 - 04:16
fonte

5 risposte

16

Smalltalk.

Tutto è stato fatto con l'invio di messaggi, quindi 1 + 2 * 3 significa "invia * con il parametro 3 all'oggetto restituito inviando il messaggio + con il parametro 2 all'oggetto 1".

Che getta le persone (mi ha buttato) a causa di come solitamente scriviamo matematica, ma poiché non riesco a ricordare la precedenza degli operatori di C, faccio fronte allo stesso modo in entrambi i linguaggi - I use () s per raggruppare i termini: 1 + (2 * 3) .

    
risposta data 15.09.2010 - 08:12
fonte
8

Avanti

È (quasi) tutta la notazione RPN, quindi non sono necessarie regole di precedenza. Scommetterei la maggior parte delle lingue usando la notazione postfix o prefisso (PostScript, Lisp ...) funzionerebbe allo stesso modo.

    
risposta data 14.09.2010 - 05:43
fonte
6

I linguaggi di tipo LISP non hanno bisogno di precedenza perché le espressioni sono completamente tra parentesi. Non c'è bisogno di precedenza da valutare

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

Conosco J, e credo che sia il parente stretto K (insieme alla loro lingua madre, APL, come notato da @Jerry Coffin), valuti tutto da destra a sinistra senza precedenza.

    
risposta data 14.09.2010 - 10:15
fonte
5

L'APL non ha precedenza. Se la memoria serve, tutto è raggruppato da destra a sinistra.

Stranamente, almeno in senso ufficiale, né C né C ++ hanno la precedenza degli operatori. Lo standard non è scritto in questo modo, sebbene (ovviamente) sia principalmente un modo diverso di dire la stessa cosa di avere la precedenza. OTOH, è solo principalmente la stessa cosa - in definitiva, non c'è modo di scrivere una tabella di precedenza per C o C ++ e ottenere tutto a posto. Ci sono alcune cose che non si adattano perfettamente.

    
risposta data 14.09.2010 - 06:13
fonte
4

Prolog.

Bene, gentile. Esistono operatori standard, con precedenza standard ... ma puoi banalmente definire operatori con predeterminazione arbitraria, perché 1 + 2 è in realtà l'obiettivo +(1, 2) .

Puoi definire gli operatori infisso ( 1 + 2 ), prefisso ( ++X ) e postfix ( X++ ), con associatività arbitraria (quindi sinistra, destra o entrambi).

    
risposta data 15.09.2010 - 08:21
fonte