2009-04-05 18 views
6

Per i miei corsi di programmazione, sto provando a scrivere alcuni frammenti di codice in lingue che usano pass per nome o passano valore-risultato, preferibilmente di default, ma qualsiasi linguaggio che Supporta anche l'una o l'altra cosa andrebbe bene. Tuttavia, non sono stato in grado di trovare una singola lingua che supporti nessuno dei due. Qualcuno sa di una lingua che usa passare per valore-risultato o passare per nome? Preferibilmente un linguaggio imperativo.Passa per nome e passa per le lingue valore-risultato

risposta

3

Il wikipedia article on evaluation strategy suggerisce che il risultato della chiamata per valore è supportato da fortran. Call-by-name è supportata da Algol 68.

+0

Grazie, penso che ho intenzione di percorrere questa strada. – dancavallaro

+0

** Algol 60 ** ha call-by-value e call-by-name; ** Algol 68 ** ha call-by-value e call-by-reference e il programmatore può adottare manualmente una metodologia call-by-copy-restore. La chiamata per condivisione assomiglia un po 'alla chiamata per riferimento (sotto forma di "procedurale"), ma non sono sicuro che siano effettivamente la stessa in Algol68. La prima versione di Algol68 aveva una chiamata per necessità, ma era stata rimossa in Rev1; – NevilleDNZ

1

Penso che le macro C siano pass-by-name (non ovviamente il linguaggio C). Non conosco lingue di risultato pass-by-value, temo (per essere onesti dovevo fare una ricerca sul web per scoprire cosa significa!).

+0

Non sono sicuro che i macro C "contino" per quello che sto cercando di fare, ma questo è un pensiero interessante, quindi grazie per quello. – dancavallaro

1

se si passa una variabile a una funzione FORTRAN e si modificano lì, si modifica anche nel programma chiamante:

psuedocodarlo:

int j = 1 
print j 
addOne(j) 
print j 

visualizzerà:

1 
2 
+1

Sono sempre stato divertito dalle (davvero) vecchie versioni di Fortran che ti permettono di chiamare addOne (1) e modificare il valore della costante 1. –

0

Sia Java e C sono pass-by-valore della lingua.

C è chiaramente un linguaggio di passaggio per valore.

A Java viene sempre detto che "le primitive vengono passate per valore, gli oggetti vengono passati per riferimento". Ma dal momento che java object è un riferimento in qualsiasi momento, quindi è in realtà un valore di riferimento.

specifiche Java Language dice questo: http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#37472

+0

Questo è vero, ma non risponde alla mia domanda .. – dancavallaro

1

Penso lingua del sistema CLIP esperto sarebbe passare per nome.

0

Algol supporta pass-by-name come si può trovare qualche spiegazione here

mi è stato detto che Ada supporta pass-by-value/risultato, ma non ho ancora provato.