calcolo lambda: chiamata per valore / chiamata per nome (pigro)

0

Difficoltà a decidere quali regole applicare per valore / per nome evaulazione. Dì che ho:

(λz.zz)(λb.b)

E voglio valutare secondo call by valute, il prossimo passo sarà

(λz.z)(λb.b)

(valuta il lato sinistro - z si applica su z), o

(λz.(λb.b)(λb.b))

(valuta prima il lato destro)

E come procede l'evulazione per la chiamata per nome?

    
posta Jayn 05.04.2016 - 19:14
fonte

2 risposte

5

Vuoi applicare

(λz.zz)

all'argomento

(λb.b)
  • Chiama per valore significa: riduci l'argomento alla forma normale e poi associa il parametro z ad esso
  • Chiamata per nome significa: sostituisci ogni occorrenza del parametro z nel corpo della funzione per l'argomento non valutato

Poiché λb.b è già in una forma normale, non fa differenza se usi call by name o call by value: in entrambi i casi finirai per sostituire ogni occorrenza di z di λb.b , dando

(λb.b) (λb.b)
    
risposta data 05.04.2016 - 19:25
fonte
1

Nessuno di questi passaggi è corretto, c'è solo un'espressione riducibile in quel termine, quindi in entrambi i casi l'unico passaggio valido è (\b. b)(\b. b) . Puoi applicare una riduzione solo quando applichi un'astrazione lambda e c'è solo un posto dove lo stai facendo, cioè al livello più esterno.

    
risposta data 05.04.2016 - 19:24
fonte

Leggi altre domande sui tag