Domanda

Sono sconcertato da tutte le funzioni integrate di Mathematica che pretendono di impedire la valutazione in qualche modo: non valutato , Defer , Hold e oltre una mezza dozzina del modulo Hold * . La documentazione di Mathematica spiega semplicemente ciascuna funzione isolatamente senza spiegare il motivo per cui sceglieresti l'una o l'altra. Qualcuno può offrire una spiegazione coerente di tutte queste funzioni? L'intera cosa mi sembra un disordine contorto. Mettere tutto in relazione con le macro di Lisp potrebbe essere un buon punto di partenza.

La maggior parte del linguaggio Mathematica è incredibilmente ben progettato, ma sembra che Wolfram si sia davvero fatto un angolo su questo aspetto. O potrei mancare qualcosa.

È stato utile?

Soluzione

Questi sono costrutti piuttosto difficili, ed è difficile dare spiegazioni chiare; non sono così semplici come le macro di Lisp (o, del resto, la relazione tra QUOTE e EVAL di Lisp). Tuttavia, c'è una buona e lunga discussione disponibile sotto forma di dagli interventi e citazioni di Robby Villegas del 1999; Espressioni non valutate " sul sito Web di Wolfram.

Defer è omesso da quel discorso, perché è nuovo a partire da Mathematica 6.0. È molto simile a HoldForm , tranne per il fatto che quando viene emesso in un front-end (ma non un kernel nudo) viene rimosso, lasciando un'espressione che può essere utilizzata come input. Ciò è molto utile se si desidera costruire a livello di programmazione espressioni che un utente può modificare e valutare, ad esempio in una tavolozza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top