¿La programación funcional está fuertemente relacionada con las matemáticas?


21

¿La programación funcional está tan relacionada con las matemáticas porque gran parte de la programación funcional se representa con nociones matemáticas? ¿Es NECESARIO tener una base sólida de matemáticas para aprender y comprender la programación funcional para un programador con una formación imperativa?


1
¿Esta pregunta está correctamente etiquetada con Mathica o debería ser matemática?

Aquí y aquí hay dos preguntas muy similares. No creo que tenga que tener una 'base sólida' en matemáticas, pero necesita una buena comprensión de sus principios desde algún punto de vista. La geometría me ayuda más con el mapeo de memoria, pero rara vez pienso en los números como tal. Sin embargo, las matemáticas son (pueden ser) MUY útiles.
Garet Claborn

Respuestas:


28

Toda la programación está relacionada con las matemáticas. De hecho, muchas universidades todavía colocan sus programas de informática bajo el ámbito del departamento de matemáticas.

En cuanto al aprendizaje de la programación funcional, no es necesario tener una base sólida en matemáticas para aprenderlo. Ahora he aprendido tres idiomas funcionales diferentes con un dominio razonable (Haskell, Erlang, Clojure) y mis propias habilidades matemáticas son extremadamente débiles. La comunidad de Haskell puede, de hecho, ser un poco molesta en su forma de hablar de las cosas centrada en las matemáticas, pero Erlang y Clojure son lenguajes de programación funcionales muy pragmáticos que no son tan difíciles de aprender porque la información del tutorial está escrita, aparentemente, para programadores, no expertos en matemáticas. Dicho esto, a pesar de mi discapacidad en matemáticas , recogí a Haskell, así que no es imposible.

La verdadera dificultad que he encontrado al elegir lenguajes de programación declarativos en general (de los cuales funcional es un subconjunto) es renunciar a ese impulso de tener el control; para decirle a la computadora qué hacer. Toma un tiempo acostumbrarse.


Buenas palabras, +1.
Mudassir

44
cuando aprendes bien SQL, la programación declarativa no es tan difícil.

7

Si. Esencialmente, un programa funcional es un conjunto de declaraciones como esa:

// 1_ y 2_ son "argumentos ficticios" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ etc.

x = f ()

y = g (x)

z = h (x, h2 (y))

etc ...

Está escribiendo lo que se supone que debe hacer el programa en forma de ecuaciones que definen nuevos valores (nota: no variables) como funciones de valores previamente definidos. También define las funciones como relaciones. Es realmente bastante similar a la forma en que se escriben los teoremas matemáticos.


Puedo entender las funciones matemáticas mejor que el extraño synatx de Haskell y otros. ¿Tiene algún enlace que relacione los pasos matemáticos con la sintaxis de cualquier lenguaje funcional?
RainDoctor

Esta respuesta es precisa. FP comenzará a tener perfecto sentido una vez que se dé cuenta (e internalice) que está escribiendo funciones matemáticas y no procedimientos paso a paso. La mayoría de las personas aprenden primero la programación de procedimientos y ese equipaje es enorme. Creo que las "funciones" en lenguajes de procedimiento deberían llamarse "procedimientos".
Kakaji

2

IMO Mathematica, como ejemplo de un lenguaje en el que puedes usar programación funcional, no requiere una sólida formación en matemáticas. De hecho, no creo haber encontrado nada parecido a la programación funcional durante mi educación matemática básica. Comencé la programación de Mathematica haciendo C-style, y descubrí la programación funcional solo años después. No creo que las construcciones de programación funcionales básicos como Map, Apply, NestList, etc requieren ningún fondo de matemáticas en absoluto.


1

realmente no. La programación funcional es solo una metodología, pero tenía su base en el cálculo lambda y cosas así.

Los cierres son un intento (pequeño) de introducir conceptos de programación funcional en lenguajes de procedimiento. en lugar de for(int i =0 ; i < num; i++) doStuff(arr[i]);, puede suponer que los elementos de la matriz pueden tener "cosas hechas" inherentementearr.each do |el| doStuff(el) end


10
Solo está ejemplificando una función anónima, no el cierre. 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 respuesta corta es: Sí, porque todo con un cierto grado de formalización (como los lenguajes de programación) está fuertemente relacionado con las matemáticas, para diversos grados de matemáticas.

Pero, usar un lenguaje de programación no requiere estrictamente familiaridad con las matemáticas, por ejemplo, los fundamentos teóricos de los lenguajes. No tiene que saber qué es un lenguaje libre de contexto y qué leyes y propiedades tiene dicho lenguaje para poder usarlo. Del mismo modo, no es necesario ser germanista o romanista para hablar alemán o francés.

La notación "matemática" no es una propiedad común de los lenguajes funcionales. Scala y todos los lenguajes basados ​​en Lisp tienen sintaxis muy diferentes en comparación con Haskell.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.