Added to Favorites

Popular Searches

Definitions

Nial (from "Nested Interactive Array Language") is a high-level array programming language developed from about 1981 by Mike Jenkins of Queen's University, Kingston, Ontario, Canada.

Nial combines a functional programming notation for arrays based on Array Theory developed by Trenchard More with structured programming concepts for numeric, character and symbolic data.

It is most often used for prototyping and artificial intelligence.

In 1982, Jenkins formed a company Nial Systems Ltd to market the language and the Q'Nial implementation of Nial. As of 2006, the company website supports an Open Source project for the Q'Nial software with the binary and source available for download under the terms of an Artistic Licence.

Nial uses a generalized and expressive Array Theory in its Version 4, but sacrificed some of the generality of functional model, and modified the Array Theory in the Version 6. Only Version 6 is available now.

Nial defines all its datatyps as nested rectangular arrays. ints, booleans, chars etc are considered as a solitary array or an array containing a single member. Arrays themselves can contain other arrays to form arbitrarily deep structures. Nial also provides Records. They are defined as non-homogenous array structure.

Functions in Nial are called Operations. From Nial manual : "An operation is a functional object that is given an argument array and returns a result array. The process of executing an operation by giving it an argument value is called an operation call or an operation application."

Nial like other APL derived languages allow the unification of binary operators and operations. Thus the below notations have the same meaning.

sum is same as +

2 + 3

2 sum 3

+ [2,3]

sum [2,3]

+ 2 3

sum 2 3

+ (2 3)

sum (2 3)

Nial also uses transformers which are higher order functions. They use the argument operation to construct a new modified operation.

twice is transformer f (f f)

twice rest [4, 5, 6, 7, 8]|6 7 8

count 6|1 2 3 4 5 6 Arrays can also be literal

Arr := [5, 6, 7, 8, 9]|5 6 7 8

Shape gives the array dimensions and reshape can be used to reshape the dimensions.

shape Arr|5

a := 2 3 reshape Arr

# reshape is a binary operation with two arguments. It can also be written in infix 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

primes is sublist [each (2 = sum eachright (0 = mod) [pass,count]), pass ] rest count

primes 10|2 3 5 7

is_divisible is 0 = mod [A,B]

Defining is_prime filter

is_prime is 2 = sum eachright is_divisible [pass,count]Count generates an array [1..N] and pass is N (identity operation). eachright applies is_divisible(pass,element) in each element of count-generated array. Thus this transforms the count-generated array into an array where numbers that can divide N are replaced by '1' and others by '0'. Hence if the number N is prime, sum [transformed array] must be 2 (itself and 1).

Now all that remains is to generate another array using count N, and filter all that are not prime.

primes is sublist [each is_prime, pass] rest count

In a

quicksort is fork [>= [1 first,tally],

pass,

link [

quicksort sublist [< [pass, first], pass ],

sublist [match [pass,first],pass ],

quicksort sublist [> [pass,first], pass ]

]

]

Using it.

quicksort [5, 8, 7, 4, 3]|3 4 5 7 8

Wikipedia, the free encyclopedia © 2001-2006 Wikipedia contributors (Disclaimer)

This article is licensed under the GNU Free Documentation License.

Last updated on Wednesday October 01, 2008 at 11:49:48 PDT (GMT -0700)

View this article at Wikipedia.org - Edit this article at Wikipedia.org - Donate to the Wikimedia Foundation

This article is licensed under the GNU Free Documentation License.

Last updated on Wednesday October 01, 2008 at 11:49:48 PDT (GMT -0700)

View this article at Wikipedia.org - Edit this article at Wikipedia.org - Donate to the Wikimedia Foundation

Copyright © 2014 Dictionary.com, LLC. All rights reserved.