[Lambda calcolo] By name, by value
Salve a tutti, qualcuno potrebbe spiegarmi la differenza tra le due semantiche by name e by value in lambda calcolo?
Grazie mille
Grazie mille

Risposte
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.
\[ \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.
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!

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!
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.
Sì, era questo che cercavo. Purtroppo il materiale che abbiamo a disposizione è molto scarso e su internet è tutto molto confusionario. Ti ringrazio davvero
