Chúng khác nhau.
chức năng First class
giá trị bằng một ngôn ngữ mà được xử lý thống nhất trong cả được gọi là "hạng nhất". Chúng có thể được lưu trữ trong các cấu trúc dữ liệu, được chuyển thành các đối số hoặc được sử dụng trong các cấu trúc điều khiển.
Các ngôn ngữ hỗ trợ các giá trị có loại hàm và xử lý chúng giống như giá trị không có chức năng, có thể được gọi là "hàm hạng nhất".
cao chức năng để
Một trong những hậu quả của việc có chức năng hạng nhất là bạn sẽ có thể vượt qua một chức năng như một đối số chức năng khác. Hàm thứ hai bây giờ là "thứ tự cao hơn". Nó là hàm nhận hàm làm đối số.
Ví dụ kinh điển là "bản đồ"
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
Đó là, phải mất một chức năng, và một mảng, và trả về một mảng mới với chức năng áp dụng cho từng yếu tố.
Ngôn ngữ chức năng - ngôn ngữ trong đó chức năng là phương tiện chính để xây dựng chương trình - tất cả đều có chức năng lớp học đầu tiên. Hầu hết cũng có chức năng bậc cao hơn (ngoại lệ rất hiếm là các ngôn ngữ như Excel, có thể nói là chức năng, nhưng không phải là thứ tự cao hơn).
Nguồn
2012-04-13 13:35:41
Tôi nghĩ rằng có một điều làm cho tôi dễ dàng bị nhầm lẫn là họ có liên quan chặt chẽ. – Simon
@Simon Tôi nghĩ rằng chìa khóa để tránh nhầm lẫn là phải nhớ rằng một ngôn ngữ có chức năng hạng nhất (bạn cũng có thể nói về những thứ khác "hạng nhất", như lớp học đầu tiên, vv), hoặc nó không . Vì vậy, bạn không bao giờ nói về ** một chức năng cụ thể ** là hạng nhất hay không. OTOH, khi bạn nói một hàm có thứ tự cao hơn hay không, điều đó chỉ nói rằng nó có hoạt động trên các hàm hay không, vì vậy "thứ tự cao hơn" là thuộc tính của từng hàm riêng lẻ. Vì vậy, "có chức năng hạng nhất" là thuộc tính của một ngôn ngữ và "là thứ tự cao hơn" là thuộc tính của hàm. – Ben
Chính xác Ben. Tôi đã nghĩ rằng cả hai đều là một tài sản cho chức năng vì vậy tôi đã nhầm lẫn. Cảm ơn ý kiến của bạn. – Simon