APL.
Несмотря на интерпретацию, все его примитивные операторы работают с массивами изначально, поэтому вам редко нужны какие-либо явные циклы.Вы пишете один и тот же код, независимо от того, являются ли данные скалярными или массивными, а интерпретатор позаботится о любом внутреннем цикле, и, следовательно, с минимальными издержками - сами циклы написаны на скомпилированном языке и будут сильно оптимизированы для конкретныхархитектура процессора, на котором он работает.
Вот пример простоты обработки массива в APL:
A <- 2 3 4 5 6 8 10
((2|A)/A) <- 0
A
2 0 4 0 6 8 10
В первой строке A задается вектор чисел.Вторая строка заменяет все нечетные числа в векторе нулями.Третья строка запрашивает новые значения A, а четвертая строка - результирующий вывод.
Обратите внимание, что явного зацикливания не требовалось, так как скалярные операторы, такие как '|'(остаток) автоматически распространяется на массивы по мере необходимости.APL также имеет встроенные примитивы для поиска и сортировки, которые, вероятно, будут быстрее, чем написание собственных циклов для этих операций.
В Википедии есть хорошая статья по APL , которая также предоставляет ссылкипоставщикам, таким как IBM и Dyalog.