Jump to content

Ниал

Ниал
Парадигма множество
Разработано Майк Дженкинс
Разработчик Ниал Системс Лтд.
Впервые появился 1981
Стабильная версия
7.0 / 2017 ; 7 лет назад ( 2017 )
Дисциплина набора текста динамичный
Лицензия GNU GPLv3
Расширения имен файлов .ndf, .nlg
Веб-сайт www .nial-array-язык .org
Основные реализации
К'Ниал
Под влиянием
АПЛ , Лисп

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
  1. ^ «Язык Ниал» . Гитхаб . 17 декабря 2021 г.
  2. ^ «Словарь К'Ниала V7» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7159ef32bcae7a5d99e9d9e8c590eebd__1653008100
URL1:https://arc.ask3.ru/arc/aa/71/bd/7159ef32bcae7a5d99e9d9e8c590eebd.html
Заголовок, (Title) документа по адресу, URL1:
Nial - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)