La programmazione funzionale è fortemente correlata alla matematica?


21

La programmazione funzionale è così legata alla matematica perché gran parte della programmazione funzionale è rappresentata con nozioni matematiche? È DEVE avere una solida base di matematica per imparare e comprendere la programmazione funzionale per un programmatore con un background imperativo?


1
Questa domanda è correttamente taggata con matematica o dovrebbe essere matematica?

Qui e qui ci sono due domande molto simili. Non credo che si ha di avere una 'base forte' in matematica, ma è necessario un discreto comprensione di esso di principi da un certo punto di vista. La geometria mi aiuta di più con la mappatura della memoria, ma raramente penso ai numeri come tali. La matematica è (può essere) MOLTO utile però.
Garet Claborn,

Risposte:


28

Tutta la programmazione è legata alla matematica. In effetti molte università pongono ancora i loro programmi di informatica sotto la competenza del dipartimento di matematica.

Per quanto riguarda l'apprendimento della programmazione funzionale, non è necessario disporre di una solida base in matematica per apprenderla. Ho imparato tre diverse lingue funzionali ora con ragionevole competenza (Haskell, Erlang, Clojure) e le mie abilità matematiche sono estremamente deboli. La comunità di Haskell può, in effetti, diventare un po 'noiosa nel suo modo di parlare delle cose incentrato sulla matematica, ma Erlang e Clojure sono entrambi linguaggi di programmazione funzionale molto pragmatici che non sono così difficili da imparare perché le informazioni del tutorial sono scritte, apparentemente, per i programmatori, non per i fanatici della matematica. Detto questo, nonostante il mio handicap in matematica ho fatto prendere Haskell, quindi non è impossibile.

La vera difficoltà che ho riscontrato nel raccogliere i linguaggi di programmazione dichiarativa in generale (di cui funzionale è un sottoinsieme) sta rinunciando a quella voglia di avere il controllo; per dire al computer cosa fare. Ci vuole un po 'per abituarsi.


Belle parole, +1.
Mudassir,

4
quando si arriva a imparare bene SQL la programmazione dichiarativa non è così difficile.

7

Sì. In sostanza, un programma funzionale è un mucchio di affermazioni del genere:

// 1_ e 2_ sono "argomenti fittizi" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ ecc ...

x = f ()

y = g (x)

z = h (x, h2 (y))

eccetera...

Stai scrivendo cosa dovrebbe fare il programma sotto forma di equazioni che definiscono nuovi valori (nota: non variabili) come funzioni di valori precedentemente definiti. Definisci anche le funzioni come relazioni. È molto simile al modo in cui sono scritti i teoremi matematici.


Riesco a capire le funzioni matematiche meglio della strana sintassi di haskell e altri. Hai qualche link che collega i passaggi matematici alla sintassi di qualsiasi linguaggio funzionale?
RainDoctor,

Questa risposta è precisa FP inizierà ad avere perfettamente senso una volta realizzato (e interiorizzato) che stai scrivendo funzioni matematiche e non procedure passo-passo. La maggior parte delle persone impara prima la programmazione procedurale e quel bagaglio è enorme. Penso che le "funzioni" nei linguaggi procedurali debbano essere chiamate "procedure".
Kakaji,

2

IMO Mathematica, come esempio di un linguaggio in cui è possibile utilizzare la programmazione funzionale, non richiede un forte background in matematica. In effetti, non credo di aver riscontrato nulla di simile alla programmazione funzionale durante la mia educazione matematica di base. Ho iniziato a programmare Mathematica facendo C-style e ho scoperto la programmazione funzionale solo anni dopo. Non credo che i costrutti di base di programmazione funzionali come Map, Apply, NestList, ecc richiedono qualsiasi sfondo di matematica a tutti.


1

non proprio. la programmazione funzionale è solo una metodologia, ma aveva la sua base nel calcolo lambda e cose del genere.

Le chiusure rappresentano un (piccolo) tentativo di introdurre concetti di programmazione funzionale nei linguaggi procedurali. invece di for(int i =0 ; i < num; i++) doStuff(arr[i]);, puoi invece supporre che gli elementi dell'array possano intrinsecamente avere "cose ​​fatte loro" cosìarr.each do |el| doStuff(el) end


10
Stai solo esemplificando una funzione anonima, non la chiusura. Wikiedpia:The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.

1

La risposta breve è: Sì, perché tutto con un certo grado di formalizzazione (come i linguaggi di programmazione) è fortemente correlato alla matematica, per vari gradi di matematica.

Tuttavia, l'uso di un linguaggio di programmazione non richiede strettamente familiarità con la matematica, ad esempio fondamenti terapeutici dei linguaggi. Non devi sapere che cos'è una lingua libera dal contesto e quali leggi e proprietà ha una tale lingua per usarne una. Allo stesso modo, non devi essere germanista o romanista per parlare tedesco o francese.

La notazione "matematica" non è una proprietà comune dei linguaggi funzionali. Scala e tutte le lingue basate su Lisp hanno sintassi molto diverse rispetto a Haskell.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.