Ниал
Эта статья нуждается в дополнительных цитатах для проверки . ( январь 2022 г. ) |
![]() | |
Парадигма | множество |
---|---|
Разработано | Майк Дженкинс |
Разработчик | Ниал Системс Лтд. |
Впервые появился | 1981 |
Стабильная версия | 7.0
/ 2017 |
Дисциплина набора текста | динамичный |
Лицензия | GNU GPLv3 |
Расширения имен файлов | .ndf, .nlg |
Веб-сайт | www |
Основные реализации | |
К'Ниал | |
Под влиянием | |
АПЛ , Лисп |
Nial высокого уровня (от «Nested Interactive Array Language») — язык программирования для массивов , разработанный примерно с 1981 года Майком Дженкинсом из Королевского университета , Кингстон, Онтарио , Канада. Дженкинс стал соавтором алгоритма Дженкинса-Трауба .
Ниал сочетает в себе нотацию функционального программирования для массивов, основанную на теории массивов, разработанной Тренчардом Мором, с концепциями структурированного программирования для числовых, символьных и символических данных.
Чаще всего его используют для прототипирования и искусственного интеллекта .
К'Ниал
[ редактировать ][1] В 1982 году Дженкинс основал компанию (Nial Systems Ltd) для продвижения языка и реализации Nial в Q'Nial. По состоянию на 2014 год веб-сайт компании поддерживает проект с открытым исходным кодом для программного обеспечения Q'Nial, двоичный файл и исходный код которого доступны для загрузки. Его лицензия является производной от Artistic License 1.0 , единственными отличиями являются преамбула, определение «Обладатель авторских прав» (которое изменено с «тот, кто указан в авторских правах или авторских правах на пакет» на «NIAL Systems Limited») и экземпляр «кто бы то ни было» (которое меняется на «кто угодно»).
Концепции Ниала
[ редактировать ]Ниал использует обобщенную и выразительную теорию массивов в своей версии 4, но пожертвовал некоторой общностью функциональной модели и модифицировал теорию массивов в версии 6. Сейчас доступна только версия 6.
Nial определяет все свои типы данных как вложенные прямоугольные массивы. целые числа, логические значения, символы и т. д. рассматриваются как отдельный массив или массив, содержащий один элемент. Сами массивы могут содержать другие массивы, образуя структуры произвольной глубины. Ниал также предоставляет записи. Они определяются как неоднородная структура массива.
Функции в Nial называются операциями. Из руководства Nial: «Операция — это функциональный объект, которому дан массив аргументов и который возвращает массив результатов. Процесс выполнения операции путем присвоения ей значения аргумента называется вызовом операции или приложением операции».
Применение операций
[ редактировать ]Nial, как и другие языки, производные от APL, позволяет унифицировать бинарные операторы и операции. Таким образом, приведенные ниже обозначения имеют одно и то же значение.
Примечание: sum
то же самое, что и +
Бинарная операция:
2 + 3 2 sum 3
Обозначение массива:
+ [2,3] sum [2,3]
Обозначение пряди:
+ 2 3 sum 2 3
Сгруппированные обозначения:
+ (2 3) sum (2 3)
Ниал также использует преобразователи, которые являются функциями более высокого порядка. Они используют операцию аргумента для создания новой измененной операции.
twice is transformer f (f f) twice rest [4, 5, 6, 7, 8] |6 7 8
Атлас
[ редактировать ][2] Атлас в Nial — это операция, состоящая из массива операций-компонентов. Когда атлас применяется к значению, каждый элемент атласа по очереди применяется к значению для получения результата. Это используется для обеспечения бесточечного (без переменных) стиля определений. Он также используется трансформаторами. В приведенных ниже примерах «внутренний [+,*]» список «[+,*]» представляет собой атлас.
Примеры
[ редактировать ]Создание массивов
[ редактировать ]count 6 |1 2 3 4 5 6
Массивы также могут быть буквальными
Arr := [5, 6, 7, 8, 9] |5 6 7 8 9
Форма задает размеры массива, а для изменения формы можно использовать функцию reshape.
shape Arr |5
a := 2 3 reshape Arr # reshape is a binary operation with two arguments. It can also be written in prefix as # a := reshape [[2,3], Arr] |5 6 7 |8 9 5
b := 3 2 reshape Arr |5 6 |7 8 |9 5
a inner[+,*] b |130 113 |148 145
Вычисление среднего
[ редактировать ]Определения имеют вид «<имя> равно <выражение>».
average is / [sum, tally] average Arr |7.
Вычисление факториала
[ редактировать ]fact is recur [ 0 =, 1 first, pass, product, -1 +] fact 4 |24
Реверсирование массива
[ редактировать ]rev is reshape [ shape, across [pass, pass, converse append ] ] rev [1, 2, 3, 4] |4 3 2 1
Генерация простых чисел
[ редактировать ]Контраст с APL
primes is sublist [ each (2 = sum eachright (0 = mod) [pass,count]), pass ] rest count primes 10 |2 3 5 7
Объяснение
[ редактировать ]Checking the divisibility of A by B is_divisible is 0 = mod [A,B]
Определение фильтра is_prime
is_prime is 2 = sum eachright is_divisible [pass,count]
Count генерирует массив [1..N], а проход равен N (операция идентификации). Eachright применяет is_divisible (pass, element) к каждому элементу массива, сгенерированного счетчиком. Таким образом, это преобразует сгенерированный счетчиком массив в массив, в котором числа, которые могут делить N, заменяются на «1», а другие — на «0». Следовательно, если число N простое, сумма [преобразованный массив] должна быть равна 2 (сама и 1).
Теперь остается только сгенерировать еще один массив, используя счетчик N, и отфильтровать все, что не является простым числом.
primes is sublist [each is_prime, pass] rest count
Быстрая сортировка
[ редактировать ]link
объединяет свои массивы аргументовsublist
[A,B] возвращает список элементов B, выбранных в соответствии со списком логических значений, заданных в A, выбирая те элементы B, где соответствующий элемент A является истинным.- В
Fork
[A,B,C] X первый A является предикатом, и если A(X) истинно, то возвращается B(X), иначе возвращается C(X). Pass
— это операция идентификации для массивов.
quicksort is fork [ >= [1 first,tally], pass, link [ quicksort sublist [ < [pass, first], pass ], sublist [ match [pass,first],pass ], quicksort sublist [ > [pass,first], pass ] ] ]
Используя его:
quicksort [5, 8, 7, 4, 3] |3 4 5 7 8
Ссылки
[ редактировать ]- ^ «Язык Ниал» . Гитхаб . 17 декабря 2021 г.
- ^ «Словарь К'Ниала V7» .