[Ненормальное программирование] Язык J становится ближе к людям
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Отличительная черта языка J — это возможность написания итеративных алгоритмов без явного использования циклов и рекурсии. К примеру, сумма всех элементов массива решается так "+/", а среднее всех элементов массива так "+/%#".
Различные обзоры J уже не раз публиковались на Хабре. Например в этой статье и в этой.
J — язык с 30-летней историей и он все еще развивается и совершенствуется. Однако оставалось в J одно «белое пятно» — итеративные алгоритмы с остановкой по условию. Для этого предлагалось использовать конструкцию while. в паре c break. и continue.
Использование while. в J выглядит избыточным и неуклюжим. А, кроме того, серьезно проседает по скорости в сравнении с тацитными формами.
И вот в 9й версии языка добавили новый союз F (названый так по первой букве слова «fold»).
Для сравнения решим задачу с использованием while. и с использованием нового союза
Условие простое: получить из исходного массива новый массив, который содержит удвоенные значения элементов. Длина нового массива задается извне и может быть меньше исходного.
Сначала с использованием while.
t =: dyad define
c =. 0
i =. i.x
z =. $0
while. -. c = y
do.
z =. z , (+: (c { i))
c =. >: c
end.
z
)
10 t 5
0 2 4 6 8
А теперь решение с использованием нового союза F. Добавим, что условие выхода из цикла проверяется с помощью глагола Z:
COUNT =: 6
v=: dyad define
_2 Z: -.* COUNT =: <: COUNT
x
)
'' +: F:. v (i.10)
0 2 4 6 8
В документации обещают, что F. будет не только удобнее, но и быстрее while. В конце концов, J становится ближе к людям!
P.S. Знающие люди могут заметить, что эта задачка легко решается без использования как цикличных, так и новых конструкций. Достаточно извлечь подмассив нужной длины и потом в тацитной форме его обработать. Однако в реальных задачах часто бывает, что длина подмассива заранее неизвестна и условие останова вычисляется в процессе работы алгоритма.
===========
Источник:
habr.com
===========
Похожие новости:
- [JavaScript, Интерфейсы, Управление разработкой, TypeScript] Как перенести на TypeScript большую кодовую базу React UI-компонентов
- [JavaScript, Программирование, Разработка веб-сайтов] JavaScript: полное руководство по классам (перевод)
- [Разработка под Android] Navigation Component-дзюцу, vol. 1 — BottomNavigationView
- [Assembler, Игры и игровые приставки, Ненормальное программирование, Разработка игр] Эмуляция NES/Famicom/Денди на веб-технологиях. Доклад Яндекса
- [JavaScript] Прототипы в JS и малоизвестные факты
- [Компьютерное железо, Ноутбуки] Intel Evo — Project Athena, вторая смена
- [Java] Пример создания утилиты для Unigraphics NX с помощью библиотеки NXOpen на языке Java
- [Программирование, Java, .NET] Мне надоело, что индустрия зависит от прихоти создателей языков программирования. Сообществу нужно больше власти
- [Программирование, Java] Знакомимся с Event Sourcing. Часть 1 (перевод)
- [1С-Битрикс, JavaScript, PHP] Меняем страницу просмотра элемента универсальных списков в коробочном Битрикс24
Теги для поиска: #_nenormalnoe_programmirovanie (Ненормальное программирование), #_j, #_nenormalnoe_programmirovanie (
Ненормальное программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:40
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Отличительная черта языка J — это возможность написания итеративных алгоритмов без явного использования циклов и рекурсии. К примеру, сумма всех элементов массива решается так "+/", а среднее всех элементов массива так "+/%#". Различные обзоры J уже не раз публиковались на Хабре. Например в этой статье и в этой. J — язык с 30-летней историей и он все еще развивается и совершенствуется. Однако оставалось в J одно «белое пятно» — итеративные алгоритмы с остановкой по условию. Для этого предлагалось использовать конструкцию while. в паре c break. и continue. Использование while. в J выглядит избыточным и неуклюжим. А, кроме того, серьезно проседает по скорости в сравнении с тацитными формами. И вот в 9й версии языка добавили новый союз F (названый так по первой букве слова «fold»). Для сравнения решим задачу с использованием while. и с использованием нового союза Условие простое: получить из исходного массива новый массив, который содержит удвоенные значения элементов. Длина нового массива задается извне и может быть меньше исходного. Сначала с использованием while. t =: dyad define
c =. 0 i =. i.x z =. $0 while. -. c = y do. z =. z , (+: (c { i)) c =. >: c end. z ) 10 t 5 0 2 4 6 8 А теперь решение с использованием нового союза F. Добавим, что условие выхода из цикла проверяется с помощью глагола Z: COUNT =: 6
v=: dyad define _2 Z: -.* COUNT =: <: COUNT x ) '' +: F:. v (i.10) 0 2 4 6 8 В документации обещают, что F. будет не только удобнее, но и быстрее while. В конце концов, J становится ближе к людям! P.S. Знающие люди могут заметить, что эта задачка легко решается без использования как цикличных, так и новых конструкций. Достаточно извлечь подмассив нужной длины и потом в тацитной форме его обработать. Однако в реальных задачах часто бывает, что длина подмассива заранее неизвестна и условие останова вычисляется в процессе работы алгоритма. =========== Источник: habr.com =========== Похожие новости:
Ненормальное программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:40
Часовой пояс: UTC + 5