Frage

Ich habe ein Problem, das ich glaube, am besten durch einen funktionalen Stil der Programmierung gelöst werden.

von einem sehr Imperativ Hintergrund kommend, ist mir zu programmieren Design Einbeziehung Klassendiagramme / Beschreibungen, Kommunikationsdiagramme, Zustandsdiagramme usw. Diese Diagramme jedoch verwendet werden, alle bedeuten, oder zu beschreiben sind, verwendet werden, um den Zustand eines Systems und die verschiedenen Nebenwirkungen, die Aktionen haben auf dem System.

Gibt es standardisierte Reihe von Diagrammen oder mathematische Symbole in der Gestaltung von Funktionsprogrammen verwendet werden, oder sind solche Programme am besten in kurzen Funktions-Pseudo-Code (vorausgesetzt, dass Funktionen viel kürzer sein wird als zwingend notwendig Pendants).

Danke, Mike

War es hilfreich?

Lösung

Es gibt einen geheimen Trick, um die funktionale Programmierung.

  1. Es ist weitgehend staatenlos, so dass der traditionelle Imperativ Diagramme ist nicht wichtig.

  2. Die meisten gewöhnlichen, Garten-Sorte mathematische Schreibweise ist auch staatenlos.

Funktionelles Design ist eher wie Algebra als alles andere. Du wirst Funktionen definieren, und zeigt, dass die Zusammensetzung dieser Funktionen das gewünschte Ergebnis erzeugt.

Diagramme sind nicht so notwendig, da die funktionale Programmierung etwas einfacher als prozeduralen Programmierung ist. Es ist eher wie herkömmliche mathematische Notation. Verwenden mathematische Techniken zu zeigen, dass Ihre verschiedenen Funktionen, die richtigen Dinge zu tun.

Andere Tipps

Funktionelle Programmierer sind in dem Schreiben von Gleichungen zu schreiben Diagramme dann. Das Spiel heißt equational Begründung und es geht meist

  • Setzt man gleich für equals

  • Die Anwendung algebraische Gesetze

  • Der gelegentliche Beweis durch Induktion

Die Idee ist, dass man wirklich einfachen Code schreiben, die „offensichtlich richtig“ ist, dann verwenden Sie equational Argumentation es in etwas zu verwandeln, die sauberer ist und / oder wird eine bessere Leistung. Der Meister dieser Kunst ist ein Oxford-Professor namens Richard Vogel.

Zum Beispiel, wenn ich möchte das Schema Ausdruck vereinfachen

(append (list x) l)

Ich werde gleich für Gleichen wie verrückt subsitute. Mit der Definition von list ich

(append (cons x '()) l)

Subsituting den Körper von append Ich habe

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

Jetzt habe ich diese algebraischen Gesetze:

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

und substituierende gleich für gleich I get

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

Mit einem weiteren Gesetz, (if #f e1 e2) == e2, ich

(cons x (append '() l))

Und wenn ich die Definition von append aufwenden wieder ich

(cons x l)

, die ich bewiesen haben, ist gleich

(append (list x) l)

Ich weiß nicht viel über die funktionale Programmierung, aber hier sind zwei Dinge, die ich laufen habe in

  • λ (Lambda) wird oft verwendet, um ein bezeichnen Funktion
  • f ο g verwendet Funktion, um anzuzeigen, Zusammensetzung
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top