2016-06-06 21 views
12

Ho notato che la parola "morale" continua a comparire nei contesti di programmazione funzionale. Un paio di esempi:Cosa intendono i programmatori funzionali per "morale"?

Sono familiarità con questi usi della parola. Posso principalmente dedurre quello che stanno cercando di dire, ma possiamo chiarire più precisamente che cosa significa?

(Cross-postato su English Language & Usage)

+3

Questo sembra più simile a una domanda [programmers.se]. – jonrsharpe

+2

FWIW, basta "morale" e il senso rimane lo stesso. IMO, tutta questa "moralità" è solo una moda di FP; vedi http://rationalwiki.org/wiki/Moral_equivalence ecc. – vaxquis

+2

"L'equivalenza morale" può essere pensata più o meno come lo stesso principio che segue la digitazione delle anatre ... Se cammina come un'anatra, parla come un'anatra e ciarlatano come un'anatra, quindi deve essere un'anatra.È un altro modo di dire "finché il risultato finale è lo stesso (ottengo lo stesso risultato dato un input specifico), non mi interessa davvero cosa succede sotto il cofano". –

risposta

4

Il termine "equivalenza morale" in logiche (formalizzati), e, per estensione, in programmazione non ha nulla a che fare con appello alla moralità (come in, etici o questioni filosofiche) . Sta cooptando il termine "moralmente", ma significa qualcosa di diverso. In genere si suppone significhi "P tiene, ma solo in certe condizioni laterali". Queste condizioni sono spesso omesse se non hanno valore educativo, sono banali, tecniche e/o noiose. Quindi, l'articolo collegato su "equivalenza morale" non ha nulla a che fare - non ci sono giudizi di valore coinvolti qui.

Non so molto di Purescript, ma il modo in cui interpreto la frase che hai citato come "è possibile ottenere la stessa cosa con Aff come ErrorT (ContT Unit (Eff e)) a".

Per dare un altro esempio: supponiamo che tu abbia due funzioni e che ti interessi solo un sottoinsieme specifico (forse di grandi dimensioni) dei loro domini. Diciamo anche che queste due funzioni concordano su questi domini, cioè per tutti x ∈ dom, f (x) = g (x). Ma, per fare un esempio, forse fanno qualcosa di diverso su 0, ma non li passeranno mai 0 (perché 0 viola qualche ipotesi). Si potrebbe ragionevolmente dire che f e g "sono moralmente equivalenti".

Soprattutto nella comunità di logiche, ci sono altri usi di "morale", ad esempio nella frase "la prova è moralmente discutibile", il che significa che l'autore ritiene che la prova sia sciatta e che possa avere lacune, ma tecnicamente risolvibile. In un caso particolare, vale a dire l'esecuzione di prove su programmi potenzialmente non terminanti, la carta che hai citato dà una giustificazione del genere, che è ripresa nel titolo "Il ragionamento rapido e sciolto è moralmente corretto".