2009-05-05 12 views
6

Tengo un problema, que creo que se resuelve mejor mediante un estilo funcional de programación.Programación funcional: símbolos estándar, diagramas, etc.

Viniendo de un fondo muy imprescindible, estoy acostumbrado al diseño de programa que involucra a los diagramas de clases/descripciones, diagramas, diagramas de comunicación estatales, etc. Sin embargo, estos diagramas, todo lo indican, o se utilizan para describir el estado de un sistema y de la varios efectos secundarios que las acciones tienen en el sistema.

¿Hay cualquier conjunto estandarizado de diagramas o símbolos matemáticos utilizados en el diseño de programas funcionales, o son tales programas mejor diseñados en código funcional pseudo corta (teniendo en cuenta que las funciones serán mucho más cortos que sus homólogos imperativas).

Gracias, Mike

Respuesta

7

hay un truco secreto para la programación funcional.

  1. Es en gran medida apátrida, por lo que los diagramas imperativos tradicionales no importan.

  2. La mayor parte de la notación matemática de variedad de jardín también es apátrida.

El diseño funcional se parece más al álgebra que cualquier otra cosa. Definirá las funciones y mostrará que la composición de esas funciones produce el resultado deseado.

Los diagramas no son tan necesarios porque la programación funcional es algo más simple que la programación de procedimientos. Es más como la notación matemática convencional. Use técnicas matemáticas para mostrar que sus diversas funciones hacen las cosas correctas.

-1

No sé mucho acerca de la programación funcional, pero aquí hay dos cosas que me he topado con

  • λ (lambda) a menudo se utiliza para denotar una función
  • f ο g se utiliza para indicar la función composición
+0

flecha notación para tipos, es decir: ('a -> M' b) -> M 'a -> M 'b – nlucaroni

+1

Guau, que se perdió la pregunta tan difícil. oO – Profpatsch

4

Los programadores funcionales se dedican más a escribir ecuaciones que a escribir diagramas. El juego se llama razonamiento ecuacional y sobre todo implica

  • Sustituyendo es igual a igual

  • La aplicación de las leyes algebraicas

  • La prueba de vez en cuando por inducción

La idea es que escribes un código realmente simple que es "manifiestamente correcto", entonces tu considera el razonamiento ecuacional para convertirlo en algo que sea más limpio y/o tenga un mejor rendimiento. El maestro de este arte es un profesor de Oxford llamado Richard Bird.

Por ejemplo, si quiero simplificar la expresión Esquema

(append (list x) l) 

voy a subsitute es igual a los iguales como un loco. Usando la definición de list consigo

(append (cons x '()) l) 

Subsituting el cuerpo de append tengo

(if (null? (cons x '())) 
    l 
    (cons (car (cons x '())) (append (cdr (cons x '())) l))) 

Ahora tienen estas leyes algebraicas:

(null? (cons a b)) == #f 
(car (cons a b)) == a 
(cdr (cons a b)) == b 

y sustitución es igual a igual consigo

(if #f 
    l 
    (cons x (append '() l)) 

Con otra ley, (if #f e1 e2) == e2, consigo

(cons x (append '() l)) 

Y si gasta la definición de anexar de nuevo consigo

(cons x l) 

que he probado es igual a

(append (list x) l) 
Cuestiones relacionadas