Fexpr sono in qualche modo ortogonali alla valutazione pigra/desiderosa.
Il solito approccio di funzione è di valutare gli argomenti di una funzione e quindi di chiamarla sul risultato. L'eval pigro si comporta ancora così, ritarda la valutazione solo immediatamente prima che il parametro venga usato.
Il solito approccio macro consiste nel passare gli argomenti non valutati in un modello che valuta tutto ciò che non è quotato. Il pezzo risultante di AST viene iniettato nel sito di chiamata dove viene di solito valutato di nuovo. Questo funziona allo stesso modo con eval pigro.
L'approccio fexpr storicamente folle consiste nel passare argomenti non valutati alla funzione, che fa ciò che piace a loro. Il risultato viene iniettato direttamente nel sito di chiamata e di solito non viene valutato automaticamente.
Il fexpr è abbastanza vicino a una trasformata arbitraria. Quindi puoi implementare macro e lambda con loro. Puoi anche implementare qualsiasi ibrido di valutazione desideroso/pigro che desideri. Allo stesso modo è possibile implementare eval (default) pigro predefinito di fexpr e chiamate esplicite a eval() in vari punti per forzare il comportamento desideroso.
Non penso che caratterizzerei fexpr come una soluzione semplice per implementare l'eval lazy sebbene, in una cura sia peggio del senso della malattia.
fonte
2015-10-07 08:58:11
Di fexprs, ti riferisci a [macros] (http://en.wikipedia.org/wiki/Macro_ (computer_science) #Lisp_macros) oa effettivi [fexprs] (http://en.wikipedia.org/ wiki/Fexpr)? Sto chiedendo poiché la stragrande maggioranza dei moderni Lisp usa macro invece di fexprs. – malisper
FEXPR è morto nel mainstream Lisp negli anni '80 e sostituito da macro. Le macro servono per astrarre la sintassi. Con la valutazione lazy tutte le forme speciali possono essere funzioni, quindi è possibile implementare la sintassi con le funzioni poiché la valutazione non avviene finché non si ha bisogno di qualcosa calcolato. Di solito queste sono lingue diverse, quindi non riesco a vedere come i due devono essere confrontati quando non si incontrano mai in una lingua. – Sylwester
@malisper Sì, mi riferisco ai fexprs effettivi o "call-by-text" se lo si desidera. –