2009-05-05 15 views
6

Mam problem, który moim zdaniem najlepiej rozwiązać za pomocą funkcjonalnego stylu programowania.Programowanie funkcjonalne - standardowe symbole, diagramy itp.

Pochodzę z bardzo imperatywnego tła, jestem przyzwyczajony do programowania projektu zawierającego diagramy/opisy klas, schematy komunikacji, diagramy stanu itp. Diagramy te jednak implikują lub są używane do opisania stanu systemu i różne skutki uboczne, które mają wpływ na system.

Czy istnieje jakiś znormalizowany zestaw schematów lub symboli matematycznych używanych w projektowaniu programów funkcjonalnych, czy też takie programy najlepiej zaprojektowane są w skrócie funkcjonalny pseudo-kod (biorąc pod uwagę, że funkcje będą znacznie krótsze niż imperatywne odpowiedniki).

Dzięki, Mike

Odpowiedz

7

Istnieje tajny trik do programowania funkcjonalnego.

  1. To w dużej mierze bezpaństwowiec, więc tradycyjne schematy obowiązkowe nie mają znaczenia.

  2. Większość zwykłych notatek matematycznych o różnych odmianach roślin jest również bezpaństwowcami.

Funkcjonalny design jest bardziej podobny do algebry niż cokolwiek innego. Zamierzasz zdefiniować funkcje i pokazać, że skład tych funkcji daje oczekiwany rezultat.

Schematy nie są tak potrzebne, ponieważ programowanie funkcjonalne jest nieco prostsze niż programowanie proceduralne. To bardziej przypomina konwencjonalną notację matematyczną. Użyj technik matematycznych, aby pokazać, że twoje różne funkcje robią właściwe rzeczy.

-1

nie wiem wiele na temat programowania funkcyjnego, ale tutaj są dwie rzeczy biegać w

  • Î (lambda) jest często stosowane do określenia funkcję
  • f ο g jest wykorzystywany do wskaż funkcję skład
+0

strzałki notację rodzaje, a mianowicie: ('a -> M' b) -> M 'a -> M 'b – nlucaroni

+1

Wow, które tak mocno przeoczyły to pytanie. oO – Profpatsch

4

Programiści funkcjonalni bardziej polegają na pisaniu równań niż na pisaniu diagramów. Gra nazywa equational rozumowanie i to przeważnie wiąże

  • Podstawiając równa dla równa

  • Stosując algebraiczne prawa

  • Okazjonalny dowód przez indukcję

Pomysł jest to, że piszesz naprawdę prosty kod, który jest "oczywiście poprawny", to ty rozumowanie racjonalne, aby przekształcić je w coś, co jest czystsze i/lub będzie działało lepiej. Mistrzem tej sztuki jest profesor z Oxfordu, Richard Bird.

Na przykład, jeśli chcę, aby uprościć wyraz schemat

(append (list x) l) 

będę subsitute odpowiada za równymi jak szalony. Stosując definicję list uzyskać

(append (cons x '()) l) 

Subsituting ciało append mam

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

Teraz mam te algebraiczne przepisach:

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

i podstawiając odpowiada za równe uzyskać

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

Z innego prawa, (if #f e1 e2) == e2, mam

(cons x (append '() l)) 

A gdybym ponownie wydać definicję append uzyskać

(cons x l) 

które okazały wynosi

(append (list x) l) 
Powiązane problemy