[Lambda calcolo] By name, by value

vgord7
Salve a tutti, qualcuno potrebbe spiegarmi la differenza tra le due semantiche by name e by value in lambda calcolo?
Grazie mille :-)

Risposte
apatriarca
Non ti sono stati forniti degli esempi? Qualcosa come segue?
\[ \begin{align}
\mbox{(call by name)} \quad (\lambda x.\,x + x)\;(2 + 2) &\rightarrow (2 + 2) + (2 + 2) \rightarrow 4 + 4 \rightarrow 8 \\
\mbox{(call by value)} \quad (\lambda x.\,x + x)\;(2 + 2) &\rightarrow (\lambda x.\,x + x)\;4 \rightarrow 4 + 4 \rightarrow 8
\end{align} \]
Nel primo caso prima sostituisci l'espressione nella lambda e poi valuti il suo valore, nel secondo prima valuti l'espressione e poi sostituisci all'interno della lambda.

EDIT: Ovviamente ho inserito nel lambda calcolo le usuali operazioni aritmetiche e i numeri per comodità.. Non è necessario per quanto riguarda questi concetti.

vgord7
Ti ringrazio per la risposta e per l'esempio, mi hai permesso di capire :-)
Posso chiederti un'altra cosa? Mi servirebbe capire come queste due semantiche vengono applicate agli operatori di punto fisso. Mi basterebbe un'esempio semplice anche come quello che hai già fatto.

Grazie mille!

apatriarca
Supponiamo di avere \( (\lambda\,x y. y) (Y z) 2. \) Nel caso del call by name otteniamo semplicemente \(2\) in quanto la \(x\) non è usata e quindi questo tipo di semantica non valuta l'Y combinator.. Nel call by value invece hai un ciclo infinito dato dal \( Y z = z (Y z) = z ( z (Y z) ) ) = \dots \) Era qualcosa di questo tipo che stavi cercando? Si tratta comunque di qualcosa che ogni libro dovrebbe discutere.

vgord7
Sì, era questo che cercavo. Purtroppo il materiale che abbiamo a disposizione è molto scarso e su internet è tutto molto confusionario. Ti ringrazio davvero :-)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.