Из Википедии, свободной энциклопедии
Перейти к навигацииПерейти к поиску

Nial (от «Nested Interactive Array Language») - это язык программирования массивов высокого уровня, разработанный примерно в 1981 году Майком Дженкинсом из Королевского университета , Кингстон, Онтарио , Канада. Дженкинс стал соавтором алгоритма Дженкинса – Трауба .

Ниал сочетает нотацию функционального программирования для массивов, основанную на теории массивов, разработанной Тренчардом Мором, с концепциями структурированного программирования для числовых, символьных и символьных данных.

Чаще всего используется для прототипирования и искусственного интеллекта .

Q'Nial

В 1982 году Дженкинс основал компанию (Nial Systems Ltd) для продвижения языка и реализации Q'Nial Nial. По состоянию на 2014 год веб-сайт компании поддерживает проект с открытым исходным кодом для программного обеспечения Q'Nial с двоичным кодом и исходным кодом, доступными для загрузки. Его лицензия получена из Artistic License 1.0 , единственными отличиями являются преамбула, определение «Правообладатель» (которое изменено с «лицо, указанное в авторских правах или авторских правах на пакет» на «NIAL Systems Limited») и экземпляр «кто угодно» (который заменяется на «кто угодно»).

Ниал концепции

Ниал использует обобщенную и выразительную теорию массивов в своей версии 4, но пожертвовал частью общности функциональной модели и изменил теорию массивов в версии 6. Сейчас доступна только версия 6.

Ниал определяет все свои типы данных как вложенные прямоугольные массивы. целые числа, логические значения, символы и т. д. рассматриваются как отдельный массив или массив, содержащий единственный член. Сами массивы могут содержать другие массивы для формирования структур произвольной глубины. Ниал также предоставляет отчеты. Они определяются как неоднородная структура массива.

Функции в Nial называются Операциями. Из руководства Nial: «Операция - это функциональный объект, которому задан массив аргументов и который возвращает массив результатов. Процесс выполнения операции путем передачи ему значения аргумента называется вызовом операции или приложением операции».

Применение операций

Nial, как и другие языки, производные от APL, позволяет унифицировать бинарные операторы и операции. Таким образом, следующие обозначения имеют то же значение. Примечание: то sumже, что и+

Бинарная операция:

2 + 3
2 сумма 3

Обозначение массива:

+ [2,3]
сумма [2,3]

Обозначение цепочки:

+ 2 3
сумма 2 3

Сгруппированные обозначения:

+ (2 3)
сумма (2 3)

Ниал также использует преобразователи, которые являются функциями более высокого порядка. Они используют операцию аргумента для создания новой измененной операции.

дважды трансформатор f (ff)
дважды отдыхать [4, 5, 6, 7, 8]
| 6 7 8

Атлас

Атлас в Ниале - это операция, состоящая из множества компонентных операций. Когда атлас применяется к значению, каждый элемент атласа применяется по очереди к значению, чтобы обеспечить конечный результат. Это используется для обеспечения стиля определений без точек (без переменных). Он также используется трансформаторами. В приведенных ниже примерах «внутренний [+, *]» список «[+, *]» является атласом.

Примеры

Создание массивов

считать 6
| 1 2 3 4 5 6

Массивы также могут быть буквальными

Приб .: = [5, 6, 7, 8, 9]
| 5 6 7 8 9

Форма дает размеры массива, а изменение формы можно использовать для изменения размеров.

форма Arr
| 5
a: = 2 3 изменить форму Arr
# reshape - это бинарная операция с двумя аргументами. Его также можно записать в префиксе как
# a: = reshape [[2,3], Arr]
| 5 6 7
| 8 9 5
b: = 3 2 изменить форму Arr
| 5 6
| 7 8
| 9 5
а внутренний [+, *] б
| 130 113
| 148 145

Вычисление среднего

Определения имеют форму "<имя> равно <выражение>".

в среднем / [сумма, подсчет]
средний обр.
| 7.

Вычисление факториала

факт повторяется [0 =, 1 первый, прошел, продукт, -1 +]
факт 4
| 24

Обращение массива

rev is reshape [shape, through [pass, pass, converse append]]
rev [1, 2, 3, 4]
| 4 3 2 1

Генерация простых чисел

Контраст с APL

простые числа - это подсписок [каждый (2 = сумма каждого правая (0 = мода) [пройти, счет]), пройти] счетчик остатков
простые числа 10
| 2 3 5 7

Объяснение

Проверка делимости A на B
is_divisible равно 0 = mod [A, B]

Определение фильтра is_prime

is_prime равно 2 = сумма каждого права is_divisible [pass, count]

Count генерирует массив [1..N], а pass - N (операция идентификации). eachright применяет is_divisible (проход, элемент) к каждому элементу массива, сгенерированного счетчиком. Таким образом, это преобразует массив, сгенерированный счетчиком, в массив, в котором числа, которые могут делить N, заменяются на «1», а другие - на «0». Следовательно, если число N простое, сумма [преобразованный массив] должна быть 2 (сама и 1).

Теперь осталось только сгенерировать другой массив, используя счетчик N, и отфильтровать все, что не является простым.

простые числа - это подсписок [каждый is_prime, pass] счетчик остатков

QuickSort

  • link объединяет свои массивы аргументов
  • sublist [A, B] возвращает список элементов B, выбранных в соответствии со списком логических значений, заданным в A, выбирая те элементы B, для которых соответствующий элемент A является истинным.
  • В Fork[A, B, C] X первый A является предикатом, и если A (X) истинно, то возвращается B (X), иначе возвращается C (X).
  • Pass это операция идентификации для массивов.
быстрая сортировка - fork [> = [1 первый, подсчет], проходить, ссылка на сайт [ подсписок быстрой сортировки [<[пройти, первый], пройти], подсписок [совпадение [пройти, первый], пройти], подсписок быстрой сортировки [> [пройти, первый], пройти] ]
]

Используй это:

быстрая сортировка [5, 8, 7, 4, 3]
| 3 4 5 7 8