dbo:abstract
|
- Eine First-Class-Funktion (englisch first-class function, deutsch etwa „Funktion erster Klasse“) bezeichnet in der Programmierung eine Funktion, die
* einer anderen Funktion als Argument übergeben,
* von einer anderen Funktion als Wert zurückgegeben,
* einer Variablen zugewiesen,
* in einer Datenstruktur gespeichert und
* zur Laufzeit erzeugt werden kann.Teilweise gilt auch die Möglichkeit, anonyme Funktionen zu definieren, als Kriterium für eine first-class-Funktion. Erst damit wird es möglich, Closures zu erzeugen, anonyme Funktionen zu definieren oder Currying durchzuführen. Der Begriff wurde von Christopher Strachey im Kontext functions as first-class citizens Mitte der 1960er Jahre geprägt. In vielen modernen Programmiersprachen (wie Haskell, JavaScript, Smalltalk und insbesondere verschiedenen Lisp-Dialekten wie Scheme) sind alle Funktionen first-class.Einen für Anfänger sehr leicht verständlichen Zugang zu diesem Konzept bietet die bildungsorientierte visuelle Programmiersprache Snap! (BYOB). (de)
- In computer science, a programming language is said to have first-class functions if it treats functions as first-class citizens. This means the language supports passing functions as arguments to other functions, returning them as the values from other functions, and assigning them to variables or storing them in data structures. Some programming language theorists require support for anonymous functions (function literals) as well. In languages with first-class functions, the names of functions do not have any special status; they are treated like ordinary variables with a function type. The term was coined by Christopher Strachey in the context of "functions as first-class citizens" in the mid-1960s. First-class functions are a necessity for the functional programming style, in which the use of higher-order functions is a standard practice. A simple example of a higher-ordered function is the map function, which takes, as its arguments, a function and a list, and returns the list formed by applying the function to each member of the list. For a language to support map, it must support passing a function as an argument. There are certain implementation difficulties in passing functions as arguments or returning them as results, especially in the presence of non-local variables introduced in nested and anonymous functions. Historically, these were termed the funarg problems, the name coming from "function argument". In early imperative languages these problems were avoided by either not supporting functions as result types (e.g. ALGOL 60, Pascal) or omitting nested functions and thus non-local variables (e.g. C). The early functional language Lisp took the approach of dynamic scoping, where non-local variables refer to the closest definition of that variable at the point where the function is executed, instead of where it was defined. Proper support for lexically scoped first-class functions was introduced in Scheme and requires handling references to functions as closures instead of bare function pointers, which in turn makes garbage collection a necessity. (en)
- 計算機科学において、第一級関数(だいいっきゅうかんすう、英: first-class function、ファーストクラスファンクション)とは、関数を第一級オブジェクトとして扱うことのできるプログラミング言語の性質、またはそのような関数のことである。その場合その関数は、型のある言語では function type(en:Function type)などと呼ばれる型を持ち、またその値は関数オブジェクトなどになる。具体的にはプログラムの実行時に生成され、データ構造に含めることができ、他の関数の引数として渡したり、戻り値として返したりすることのできる関数をいう。この概念はメタプログラミングとは異なり、コンパイラ呼び出しやeval関数によって生成された関数は含まれない。無名関数も参照。 第一級関数は関数型言語には必要不可欠であり、高階関数のような形で日常的に用いられる。例として、関数とリストを引数に取り、リストの各要素に関数を適用した結果のリストを返すmap (mapcar) 関数が挙げられる。map関数をサポートするプログラミング言語は、何らかの形で関数を関数の引数として渡すことを許容しなければならない。 Schemeでの例: (map func list0 list1 ... listN) スタックベースのプログラミング言語では、高階関数の実装における自由変数の取り扱いに関して困難な問題が生じる。これは("function argument" の略称、英: funarg problem)として知られている。 型理論では、型Aの値を受け取り、型Bの値を返す関数をA → B(もしくはBA)と書く。これはP → Qと似ているが実は同じもので、カリー・ハワード対応(カリー・ハワード同型対応、英: Curry-Howard correspondence)によれば、関数型は論理包含に関係しており、ラムダ抽象は自然演繹における仮説、関数の適用はモーダスポネンスに相当する。また多くのプログラミング言語の機能として、型理論は第一級関数が連想配列などのデータ構造をモデルするのにも用いられる。 圏論においては、第一級関数は閉圏に相当する。たとえば単純型付きラムダ計算(英: simply typed lambda calculus)は、カルテシアン閉圏(デカルト閉圏)の言語に相当する。 (ja)
- В информатике язык программирования имеет функции первого класса, если он рассматривает функции как объекты первого класса. В частности, это означает, что язык поддерживает передачу функций в качестве аргументов другим функциям, возврат их как результат других функций, присваивание их переменным или сохранение в структурах данных.Некоторые теоретики языков программирования считают необходимым условием также поддержку анонимных функций.В языках с функциями первого класса имена функций не имеют никакого специального статуса, они рассматриваются как обычные значения, тип которых является функциональным.Термин был впервые использован в контексте «функции как объекты первого класса» в середине 1960-х. Функции первого класса являются неотъемлемой частью функционального программирования, в котором использование функций высшего порядка является стандартной практикой. Простым примером функции высшего порядка будет функция Map, которая принимает в качестве своих аргументов функцию и список и возвращает список после применения функции к каждому элементу списка. Чтобы язык программирования поддерживал Map, он должен поддерживать передачу функций как аргумента. Существуют некоторые сложности в реализации передачи функций как аргументов и возвращении их как результата, особенно в присутствии нелокальных переменных, введённых во вложенных и анонимных функциях. Исторически они были названы проблемами фунарга, от английского «function argument».В ранних императивных языках программирования эти проблемы обходились путём отказа от поддержки возвращения функций как результата или отказа от вложенных функций и следовательно нелокальных переменных (в частности, C). Lisp, один из первых функциональных языков программирования, применяет подход динамической области видимости, где нелокальные переменные возвращают ближайшее определение этих переменных к точке, в которой функция была вызвана, вместо точки, в которой она была объявлена. Полноценная поддержка для лексического контекста функций первого порядка была введена в Scheme и предполагает обработку ссылок на функции как замыканий вместо чистых, что, в свою очередь, делает необходимым применение сборки мусора. (ru)
- Em ciência da computação, diz-se que uma linguagem de programação tem funções de primeira classe se ela trata as funções como cidadãos de primeira classe. Isso significa que a linguagem suporta a passagem de funções como argumentos para outras funções, retornando-as como os valores de outras funções e atribuindo-as a variáveis ou armazenando-as em estruturas de dados. Alguns teóricos da linguagem de programação também requerem suporte para (literais de função). Em linguagens com funções de primeira classe, os nomes das funções não têm nenhum estado especial. Eles são tratados como variáveis comuns com um . O termo foi cunhado por no contexto de "funções como cidadãos de primeira classe" em meados da década de 1960. As funções de primeira classe são uma necessidade para o estilo de programação funcional, no qual o uso de é uma prática padrão. Um exemplo simples de função de ordem superior é a função , que recebe, como seus argumentos, uma função e uma lista, e retorna a lista formada pela aplicação da função a cada membro da lista. Para que uma linguagem suporte map, ela deve suportar a passagem de uma função como um argumento. Existem certas dificuldades de implementação em passar funções como argumentos ou retorná-las como resultados, especialmente na presença de introduzidas em funções aninhadas e . Historicamente, essas dificuldades foram chamados de , o nome vindo de "function argument" (argumento de função, em português). Nas primeiras linguagens imperativas, esses problemas foram evitados por não suportar funções como tipos de resultado (por exemplo, ALGOL 60, Pascal) ou omitir funções aninhadas e, portanto, variáveis não locais (por exemplo, C). A antiga linguagem funcional Lisp adotou a abordagem de , onde variáveis não locais se referem à definição mais próxima daquela variável no ponto onde a função é executada, ao invés de onde ela foi definida. O suporte adequado para funções de primeira classe com escopo léxico foi introduzido em Scheme e requer o tratamento de referências a funções como clausuras em vez de vazios, que, por sua vez, torna a coleta de lixo uma necessidade. (pt)
- 头等函数(first-class function;第一級函數)是指在程序设计语言中,函数被当作头等公民。这意味着,函数可以作为别的函数的参数、函数的返回值,赋值给变量或存储在数据结构中。 有人主张应包括支持匿名函数(函数字面量,function literals)。在这样的语言中,函数的名字没有特殊含义,它们被当作具有函数类型的普通的变量对待。1960年代中期,克里斯托弗·斯特雷奇在“functions as first-class citizens”中提出这一概念。 头等函数是函数式程序设计所必须的。通常要使用高阶函数。map函数就是一个高阶函数,其实参是一个函数及一个list,返回结果是把作为参数的函数作用于list的每个元素后的结果形成的list。 把函数作为函数参数与函数返回值会遇到特别的困难。特别是存在与、匿名函数。历史上,这被称作。 早期的指令式编程语言,或者不支持函数作为结果类型(如ALGOL 60, Pascal),或者忽略嵌套函数与非局部变量(如C语言)。早期的函数式语言Lisp采取了动态作用域方法,把非局部变量绑定到函数执行点最近的变量定义。Scheme语言支持词法作用域的头等函数,把对函数的引用绑定到闭包(closure)而不是函数指针,这使得垃圾收集成为必须。 (zh)
- В інформатиці мова програмування має функції першого класу, якщо вона розглядає функції як об'єкти першого класу.Зокрема, це означає, що мова підтримує передачу функцій як аргументів інших функцій, повернення їх як результат інших функцій, присвоювання їх змінним або збереження в структурах даних. Деякі теоретики мов програмування вважають необхідною умовою також підтримку анонімних функцій. У мовах з функціями першого класу імена функцій не мають ніякого спеціального статусу, вони розглядаються як звичайні значення, тип яких є функціональним. Термін був вперше використаний Крістофером Стречі в контексті «функції як об'єкти першого класу» в середині 1960-х. Функції першого класу є невід'ємною частиною функціонального програмування, в якому використання функцій вищого порядку є стандартною практикою. Простим прикладом функції вищого порядку буде функція Map, яка приймає функцію і список як свої аргументи і повертає список, після застосування функції до кожного елементу списку. Щоб мова програмування підтримувала Map, вона повинна підтримувати передачу функцій як аргументу. Існують деякі складності в реалізації передачі функцій як аргументів і повернення їх як результату, особливо за присутності нелокальних змінних, введених у вкладених і анонімних функціях. Історично вони були названі проблемами фунарга, від англійського «function argument». У ранніх імперативних мовах програмування ці проблеми обходилися шляхом відмови від підтримки повернення функцій як результату або відмови від вкладених функцій і отже нелокальних змінних (зокрема, C). Lisp, одна з перших функціональних мов програмування, застосовує підхід динамічної області видимості, де нелокальні змінні повертають найближче визначення цих змінних до точки, у якій функція була викликана, замість точки, у якій вона була оголошена. Повноцінна підтримка для лексичного контексту функцій першого порядку була введена в Scheme і передбачає обробку посилань на функції як замикань замість чистих, що, в свою чергу, робить необхідним застосування збірки сміття. (uk)
|
rdfs:comment
|
- 头等函数(first-class function;第一級函數)是指在程序设计语言中,函数被当作头等公民。这意味着,函数可以作为别的函数的参数、函数的返回值,赋值给变量或存储在数据结构中。 有人主张应包括支持匿名函数(函数字面量,function literals)。在这样的语言中,函数的名字没有特殊含义,它们被当作具有函数类型的普通的变量对待。1960年代中期,克里斯托弗·斯特雷奇在“functions as first-class citizens”中提出这一概念。 头等函数是函数式程序设计所必须的。通常要使用高阶函数。map函数就是一个高阶函数,其实参是一个函数及一个list,返回结果是把作为参数的函数作用于list的每个元素后的结果形成的list。 把函数作为函数参数与函数返回值会遇到特别的困难。特别是存在与、匿名函数。历史上,这被称作。 早期的指令式编程语言,或者不支持函数作为结果类型(如ALGOL 60, Pascal),或者忽略嵌套函数与非局部变量(如C语言)。早期的函数式语言Lisp采取了动态作用域方法,把非局部变量绑定到函数执行点最近的变量定义。Scheme语言支持词法作用域的头等函数,把对函数的引用绑定到闭包(closure)而不是函数指针,这使得垃圾收集成为必须。 (zh)
- Eine First-Class-Funktion (englisch first-class function, deutsch etwa „Funktion erster Klasse“) bezeichnet in der Programmierung eine Funktion, die
* einer anderen Funktion als Argument übergeben,
* von einer anderen Funktion als Wert zurückgegeben,
* einer Variablen zugewiesen,
* in einer Datenstruktur gespeichert und
* zur Laufzeit erzeugt werden kann.Teilweise gilt auch die Möglichkeit, anonyme Funktionen zu definieren, als Kriterium für eine first-class-Funktion. Erst damit wird es möglich, Closures zu erzeugen, anonyme Funktionen zu definieren oder Currying durchzuführen. (de)
- In computer science, a programming language is said to have first-class functions if it treats functions as first-class citizens. This means the language supports passing functions as arguments to other functions, returning them as the values from other functions, and assigning them to variables or storing them in data structures. Some programming language theorists require support for anonymous functions (function literals) as well. In languages with first-class functions, the names of functions do not have any special status; they are treated like ordinary variables with a function type. The term was coined by Christopher Strachey in the context of "functions as first-class citizens" in the mid-1960s. (en)
- 計算機科学において、第一級関数(だいいっきゅうかんすう、英: first-class function、ファーストクラスファンクション)とは、関数を第一級オブジェクトとして扱うことのできるプログラミング言語の性質、またはそのような関数のことである。その場合その関数は、型のある言語では function type(en:Function type)などと呼ばれる型を持ち、またその値は関数オブジェクトなどになる。具体的にはプログラムの実行時に生成され、データ構造に含めることができ、他の関数の引数として渡したり、戻り値として返したりすることのできる関数をいう。この概念はメタプログラミングとは異なり、コンパイラ呼び出しやeval関数によって生成された関数は含まれない。無名関数も参照。 第一級関数は関数型言語には必要不可欠であり、高階関数のような形で日常的に用いられる。例として、関数とリストを引数に取り、リストの各要素に関数を適用した結果のリストを返すmap (mapcar) 関数が挙げられる。map関数をサポートするプログラミング言語は、何らかの形で関数を関数の引数として渡すことを許容しなければならない。 Schemeでの例: (map func list0 list1 ... listN) (ja)
- Em ciência da computação, diz-se que uma linguagem de programação tem funções de primeira classe se ela trata as funções como cidadãos de primeira classe. Isso significa que a linguagem suporta a passagem de funções como argumentos para outras funções, retornando-as como os valores de outras funções e atribuindo-as a variáveis ou armazenando-as em estruturas de dados. Alguns teóricos da linguagem de programação também requerem suporte para (literais de função). Em linguagens com funções de primeira classe, os nomes das funções não têm nenhum estado especial. Eles são tratados como variáveis comuns com um . O termo foi cunhado por no contexto de "funções como cidadãos de primeira classe" em meados da década de 1960. (pt)
- В информатике язык программирования имеет функции первого класса, если он рассматривает функции как объекты первого класса. В частности, это означает, что язык поддерживает передачу функций в качестве аргументов другим функциям, возврат их как результат других функций, присваивание их переменным или сохранение в структурах данных.Некоторые теоретики языков программирования считают необходимым условием также поддержку анонимных функций.В языках с функциями первого класса имена функций не имеют никакого специального статуса, они рассматриваются как обычные значения, тип которых является функциональным.Термин был впервые использован в контексте «функции как объекты первого класса» в середине 1960-х. (ru)
- В інформатиці мова програмування має функції першого класу, якщо вона розглядає функції як об'єкти першого класу.Зокрема, це означає, що мова підтримує передачу функцій як аргументів інших функцій, повернення їх як результат інших функцій, присвоювання їх змінним або збереження в структурах даних. Деякі теоретики мов програмування вважають необхідною умовою також підтримку анонімних функцій. У мовах з функціями першого класу імена функцій не мають ніякого спеціального статусу, вони розглядаються як звичайні значення, тип яких є функціональним. Термін був вперше використаний Крістофером Стречі в контексті «функції як об'єкти першого класу» в середині 1960-х. (uk)
|