2009-05-05 53 views
6

Tôi gặp sự cố, điều mà tôi tin là được giải quyết tốt nhất thông qua một kiểu lập trình chức năng.Lập trình chức năng - biểu tượng chuẩn, biểu đồ, v.v.

Xuất phát từ một nền tảng rất bắt buộc, tôi được sử dụng để thiết kế chương trình liên quan đến sơ đồ lớp/mô tả, sơ đồ truyền thông, sơ đồ trạng thái, vv. các tác dụng phụ khác nhau mà các hành động có trên hệ thống.

Có bất kỳ bộ biểu đồ hoặc ký hiệu toán học chuẩn nào được sử dụng trong thiết kế chương trình chức năng hay không hoặc chương trình như vậy được thiết kế tốt nhất trong mã giả chức năng ngắn (cho rằng hàm sẽ ngắn hơn nhiều so với đối tác bắt buộc).

Xin cảm ơn, Mike

Trả lời

7

Có một mẹo bí mật để lập trình chức năng.

  1. Phần lớn là không quốc tịch, vì vậy biểu đồ bắt buộc truyền thống không quan trọng.

  2. Hầu hết ký hiệu toán học bình thường, vườn cũng không có trạng thái.

Thiết kế chức năng giống đại số hơn bất kỳ thứ gì khác. Bạn sẽ định nghĩa các hàm và cho thấy rằng thành phần của các hàm đó tạo ra kết quả mong muốn.

Sơ đồ không cần thiết vì lập trình hàm có phần đơn giản hơn lập trình thủ tục. Nó giống như ký hiệu toán học thông thường. Sử dụng các kỹ thuật toán học để cho thấy rằng các chức năng khác nhau của bạn làm đúng.

-1

Tôi không biết nhiều về lập trình chức năng, nhưng đây là hai điều tôi đã chạy vào

  • λ (lambda) thường được sử dụng để biểu thị một hàm
  • f ο g được sử dụng để chỉ định hàm thành phần
+0

mũi tên ký hiệu với nhiều loại, ví dụ: ('a -> M' b) -> M 'a -> M 'b – nlucaroni

+1

Chà, điều đó đã bỏ lỡ câu hỏi khó. oO – Profpatsch

4

Lập trình hàm viết nhiều hơn vào biểu thức viết rồi viết biểu đồ. Các trò chơi được gọi là equational luận và nó chủ yếu liên quan đến

  • thay thế bằng cho bằng

  • Áp dụng pháp luật đại số

  • Bằng chứng thỉnh thoảng bằng cảm ứng

Ý tưởng là bạn viết mã thực sự đơn giản, đó là "biểu hiện chính xác", sau đó bạn u se lý luận equational để biến nó thành một cái gì đó là sạch hơn và/hoặc sẽ thực hiện tốt hơn. Các bậc thầy của nghệ thuật này là một giáo sư Oxford tên là Richard Bird.

Ví dụ, nếu tôi muốn đơn giản hóa các biểu hiện Đề án

(append (list x) l) 

tôi sẽ subsitute bằng cho equals như điên. Sử dụng định nghĩa của list tôi nhận được

(append (cons x '()) l) 

Subsituting cơ thể của append Tôi có

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

Bây giờ tôi có những luật đại số:

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

và thay thế bằng cho bằng tôi nhận được

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

Với pháp luật khác, (if #f e1 e2) == e2, tôi nhận được

(cons x (append '() l)) 

Và nếu tôi rộng định nghĩa của append một lần nữa tôi nhận được

(cons x l) 

mà tôi đã chứng minh bằng

(append (list x) l) 
Các vấn đề liên quan