Ai là người đầu tiên đặt ra thuật ngữ Chức năng bậc cao và / hoặc Công dân hạng nhất?


9

Tôi đã hiểu rằng từ lâu trước khi Haskell, O'Caml hoặc LISP, các hàm bậc cao hơn là một môn học nghiên cứu và trong toán học, Schönfinkel (năm 1967) và Haskell Curry (năm 1968) đã áp dụng các kỹ thuật như cà ri, nhưng điều đó là trước khi nó có sẵn trong bất kỳ ngôn ngữ lập trình.

Scheme, theo Wikipedia , là ngôn ngữ đầu tiên giới thiệu các chức năng bậc cao thích hợp là công dân hạng nhất, nhưng có ai chúng ta có thể gán ý tưởng ban đầu không? Có lẽ Alonzo Church, người đã phát minh ra phép tính lambda vào những năm 1930? Cụ thể hơn, ai đã đưa ra định nghĩa sau, mà tôi đã thấy trong các diễn giải khác nhau xung quanh trong một số sách và tài nguyên trực tuyến?

Một hàm được coi là có thứ tự cao hơn khi nó lấy một hàm khác làm đối số hoặc khi nó trả về một hàm. Bất kỳ hàm nào không lấy các hàm làm đối số hoặc làm kiểu trả về được gọi là hàm thứ tự đầu tiên.


1
Ý bạn là Moses Schönfinkel? Sau đó, bạn phải sai về anh ta vào năm 1967 . Ông chết trong nghèo khó vào năm 1942 .
Petr Pudlák

Cũng không phải là năm 1967 trước LISP. :-)
jimwise

Câu trả lời:


9

Frege nói trong "Funktion und Begriff" (1891):

Wie nun Funktionen von Gegenständen grundverschieden sind, vì vậy sind auch Funktionen, deren Argumente Funktionen sind und sein müssen, grundverschieden von Funktionen, deren Argumente Gegen Diese nenne ich Funktionen erster, jene Funktionen zweiter Stufe.

Trong tiếng Anh (bản dịch của tôi):

Giống như sự vật và chức năng là khác nhau, các hàm cũng vậy, có đối số là các hàm hoàn toàn khác với các hàm có đối số phải là sự vật. Tôi gọi các hàm sau của bậc một, các hàm cũ của bậc hai.


1
trích dẫn tuyệt vời! tất nhiên nó sẽ được giải phóng
sclv

Điều thú vị là lập trình chức năng hiện đại lại có quan điểm ngược lại - càng nhiều càng tốt (hoặc ít nhất, bất cứ khi nào bạn làm việc trong một thể loại kín), không có sự phân biệt giữa các hàm có đối số là hàm và hàm có đối số phải là đối số.
Chris Taylor

Máy đánh chữ vẫn nhắc tôi khi tôi trộn nó, @ChrisTaylor :)
Ingo

1
Chức năng là những thứ quá, bạn của tôi. (Để diễn giải Mitt Romney.)
tăng

1
Tôi đã từng có một khóa học về logic và chúng tôi đã sử dụng một định nghĩa cho các miền không phân biệt giữa các hằng và hàm: hằng số (giá trị) chỉ là một hàm không có đối số, tức là một hàm có giá trị không phụ thuộc vào bất kỳ giá trị đầu vào nào và do đó, đồng miền chỉ chứa một giá trị.
Giorgio

3

Bài viết trên wikipedia đã gán thuật ngữ "công dân hạng nhất" cho Strachey.

"Hàm bậc cao hơn" Tôi sẽ tưởng tượng ngày trở lại sự phân biệt giữa logic bậc cao hơn và logic bậc nhất.

Xem https://en.wikipedia.org/wiki/Higher-order_logichttp://plato.stanford.edu/entries/logic-higher-order/


Tôi không hoàn toàn chắc chắn liệu logic bậc cao và hàm bậc cao hơn có thể thay thế cho nhau dễ dàng như vậy không. Cảm ơn đã chỉ ra Strachey, bằng cách nào đó tôi đã đọc qua điều đó.
Abel

2
"Các hàm bậc cao hơn" tồn tại trong tác phẩm của Frege (ví dụ, các hàm lấy các hàm làm đối số), vượt xa công việc nền tảng của Church trên phép tính lambda. Một vị từ trong logic oder đầu tiên cổ điển chính xác là một hàm có giá trị boolean, vì vậy tôi đề nghị thứ hai của sclv rằng đây có thể là nguồn gốc của thuật ngữ.
Philip JF
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.