Обозначение #
(как указано выше) используется для обозначения «переменная идет здесь» в чистой функции («замыкание» для вас, традиционных разработчиков).В конце всегда должно следовать &
.
Лучший пример: f[x_]:=x+5
.Это создает задержанный набор, который каждый раз, когда значение передается в символьную ссылку f
в качестве функционального параметра, этому значению будет присвоено локальное контекстно-зависимое имя функции x
(не влияющее на глобальное определение * 1008).*, если есть).Затем выражение x+5
будет оценено с использованием этой новой переменной / значения.Приведенный выше процесс требует инициализации символа f
, создания локальной переменной x
и сохранения в памяти выражения x+5
, если вы не очистите его.
Примечание: f=5
и f[x_]:=5
оба работают с символом f
.f
можно назвать функцией, когда квадратные скобки используются для извлечения его значения, а f[x_]
может мирно сосуществовать с f[x_,y_]
, не перекрывая друг друга.Один будет использоваться при отправке одного параметра, а другой - при отправке двух параметров.
Иногда вам просто нужна быстрая функция, и вам не нужно определять ее и оставлять в подвешенном состоянии.Итак, (someValue + 5)
становится (#+5)&
, где &
говорит: «Я - чистая функция, и буду работать с тем, что вы мне отправляете», а #
- «Я - параметр (или список параметров)».это было отправлено в чистую функцию ".Вы также можете использовать #1
, #2
, #3
и т. Д., Если отправляете более одного параметра.
Пример использования многопараметрической чистой функции:
Допустим, mydata
- это список списков, который нужно отсортировать по медиане списков (например, данные о ценах на жилье из разных городов США):
Sort[ myData , Median[#1] > Median[#2]& ]
Быстрый совет, если выприменяя функцию к одному значению, она может выглядеть аккуратнее и чище, и для ее использования нужно меньше набирать текст @
вместо []
, что по сути означает Prefix
.Не путайте с Map (/@)
или Apply(@@)
.Приведенная выше команда становится:
Sort[ myData , Median@#1 > Median@#2 & ]
Вы можете связать @
как таковой: Reverse@Sort@DeleteDuplicates[...]