Это - функция, которая не имеет никакого имени. Для, например, в c# можно использовать
numberCollection.GetMatchingItems<int>(number => number > 5);
для возврата чисел, которые больше, чем 5.
number => number > 5
часть лямбды здесь. Это представляет функцию, которая берет параметр (число) и возвращает булево значение (число> 5). Метод GetMatchingItems использует эту лямбду на всех объектах в наборе и возвращает объекты соответствия.
Декларативно и функционально? Это будет электронная таблица.
Вообще говоря, без расширений синтаксиса (например, PL / SQL, T-SQL) вы не можете писать функции.
Но это, безусловно, очень ориентировано на выражения, это общая черта с функциональными языками.
Нет, SQL не является функциональным языком. Парадигма несколько иная. Обратите внимание, что существуют и другие типы декларативных языков программирования, помимо функциональных - каноническим примером является логическое программирование и PROLOG.
Технически, реляционная алгебра (теоретическая основа SQL) на самом деле не является полной по Тьюрингу. Хотя современные диалекты SQL добавляют достаточно процедурных функций, чтобы можно было реализовать хранимые процедуры и обеспечить завершенность по Тьюрингу на этом уровне, один запрос SQL не является полным вычислением по Тьюрингу. Реляционная алгебра обладает свойством годелевой полноты. Полнота по Геделю подразумевает способность выразить любое вычисление, которое может быть определено в терминах исчисления предикатов первого порядка - в основном то, что вы знаете как обычные логические выражения.
SQL
был разработан как декларативный язык, в том смысле, что вы сообщаете , что
вы хотите получить, а механизм SQL
принимает решение как
.
Однако SQL
работает с наборами, и результаты функций могут быть наборами первого класса в Oracle
, SQL Server
и PostgreSQL
.
Можно сказать, что SQL
является функциональным языком, если функция принимает набор на входе и производит набор на выходе.
Это то есть, вы можете написать что-то вроде этого:
SELECT *
FROM mytable t
JOIN myfunction(x) f
ON f.col1 = t.col2
или даже так:
SELECT *
FROM mytable t
CROSS APPLY
myfunction(t.col2) f
(в SQL Server
)
или это:
SELECT t.*, myfunction(t.col2)
FROM mytable t
(в PostgreSQL
)
Однако это не является частью стандарта SQL
.
Так же, как компилятор C ++
пытается найти оптимальный способ умножения двух float
s (с точки зрения простой алгебры), оптимизатор SQL
пытается найти оптимальные способы умножения двух наборов (с точки зрения реляционной алгебры).
В C ++
вы просто пишете a * b
и полагаетесь на компилятор для создания оптимальной сборки для этого .
В SQL
вы пишете SELECT * FROM NATURAL JOIN b
и полагаетесь на оптимизатор.
Однако со всеми объявленными SQL
декларативность (без каламбура), большинство настоящих оптимизаторов могут выполнять только очень простую перезапись запросов.
Скажем, ни один из известных мне оптимизаторов не может использовать один и тот же эффективный план для этого запроса:
SELECT t1.id, t1.value, SUM(t2.value)
FROM mytable t1
JOIN mytable t2
ON t2.id <= t1.id
GROUP BY
t1.id, t1.value
и для этого. :
SELECT id, value, SUM(t1.value) OVER (ORDER BY id)
FROM mytable
, не говоря уже о более сложных запросах.
Это 's почему вам все еще нужно формулировать свои запросы так, чтобы в них использовался эффективный план (при сохранении того же результата), что делает SQL
немного менее декларативным языком.
Недавно я написал сообщение в моем блоге по этому поводу:
Являются ли функции первоклассными объектами в SQL? едва. Так что я бы сказал нет.
Нет единого верного определения того, что такое функциональный язык (или, если уж на то пошло, что такое процедурный или объектно-ориентированный язык).
Но я не могу придумать ничего, что указывало бы на функциональность SQL. У него нет функций, у него нет рекурсии, у него нет замыканий, у него нет вложенных функций, у него нет функций как типов первого класса.
Более часто задаваемый вопрос: является ли SQL языком программирования вообще . Это не по Тьюрингу.
Поскольку суть функционального языка заключается в том, что вы программируете, ну, функции, я бы сказал нет. SQL - это программирование с использованием отношений (если вы даже можете назвать SQL языком программирования - в его базовой форме SQL не является полным по Тьюрингу).
Ссылка на Google: MapReduce: упрощенная обработка данных в больших кластерах
Появился в :
OSDI'04: Шестой симпозиум по разработке и реализации операционных систем,
Сан-Франциско, Калифорния, декабрь 2004 г.
Эта ссылка содержит ссылку на PDF-файл и HTML-слайд.
Существует также страница Википедии с описанием со ссылками на реализацию.
Также критика,
Дэвид ДеВитт и Майкл Стоунбрейкер, ведущие эксперты в области параллельных баз данных и не имеющие общих архитектур, сделали несколько противоречивых заявлений о широте круга проблем, для решения которых можно использовать MapReduce. Они назвали его интерфейс слишком низкоуровневым и задались вопросом, действительно ли он представляет собой сдвиг парадигмы, о котором заявляли его сторонники. Они оспаривают утверждения сторонников MapReduce о новизне, ссылаясь на Teradata как на образец предшествующего уровня техники, существующего более двух десятилетий; они сравнили программистов MapReduce с программистами Codasyl, отметив, что оба "
[Доступно для просмотра (ложь)]
На функциональном языке вычисления выполняются путем оценки функций. Функции не изменяют состояние. Все, что они делают, это вычисляют значение из своих аргументов. Другими словами, функции не вызывают побочных эффектов. Функциональные языки имеют общее назначение.SQL - это язык, разработанный для работы с системами управления реляционными базами данных. Его можно рассматривать как язык, специфичный для домена. Он предназначен для работы с «наборами» данных. Он может изменять глобальное состояние (например, базу данных) с помощью таких команд, как UPDATE. Не существует концепции функций, получающих значение. Насколько я понимаю, SQL не является даже полным по Тьюрингу.
SQL - это язык, разработанный для работы с системами управления реляционными базами данных. Его можно рассматривать как язык, специфичный для домена. Он предназначен для работы с «наборами» данных. Он может изменять глобальное состояние (например, базу данных) с помощью таких команд, как UPDATE. Не существует концепции функций, получающих значение. Насколько я понимаю, SQL не является даже полным по Тьюрингу.
SQL - это язык, разработанный для работы с системами управления реляционными базами данных. Его можно рассматривать как язык, специфичный для домена. Он предназначен для работы с «наборами» данных. Он может изменять глобальное состояние (например, базу данных) с помощью таких команд, как UPDATE. Не существует концепции функций, получающих значение. Насколько я понимаю, SQL не является даже полным по Тьюрингу.