Voglio modellare oggetti semplici come funzioni, per vedere dove mi arriva il puro approccio funzionale. Diciamo che il mio oggetto è una persona. C'è qualche funzione che mi restituisce una nuova persona, ma invece di una semplice struttura dati, mi restituisce una funzione che rappresenta la persona. Ho difficoltà a vedere come dovrebbe essere esattamente questa funzione, perché in genere associo dati / stato a una persona, ma non a nessuna funzione. Quindi se chiamo questa persona, che è una funzione ora, quale input dovrebbe prendere e cosa dovrebbe restituire?
Se osservo il calcolo lambda e alcuni esempi su come modellare i numeri, 0 è solo la funzione di identità. 1 è una funzione che accetta un'altra funzione e un valore come input e restituisce la funzione argomento applicata al valore. 2 applica la funzione due volte, ecc.
Quindi l'implementazione di una persona dovrebbe essere una funzione che prende un'altra funzione come input e la applica alla persona, restituendone l'output? Quindi in realtà è solo un contenitore per i dati della persona che consente ad altre funzioni di operare su di esso.
Può essere che non abbia senso pensare a questo senza sapere esattamente in cosa consiste una persona. In un caso molto semplice una persona potrebbe essere solo un nome. Un breve tentativo di delineare questo in Clojure:
(defn new-person [firstname lastname] (fn [f] (f firstname lastname)))
(defn get-firstname [person] (person (fn [x y] x)))
(def p (new-person "Maja" "Abel"))
(get-firstname p)
"Maja"
Quindi di nuovo i nomi sono stringhe e non molto funzionali ...
Spero che questo abbia un senso, felice se qualcuno ha qualche idea su questo!