Skip to content

walinga/Double-U

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 

Repository files navigation

DOUBLE-U

Language Specification, version 1

Double-U is a command-based language. Code is interpreted rather than compiled, meaning that an error will not cause the code preceding it to fail.

Unlike most programming language, most Double-u functions are non-deterministic. For example, select! will return a random element from the given array.

The main data structure of Double-U is the array, which can be specified as for example, [ 1 2 4 ]. The various built-in functions are able to manipulate arrays to produce interesting results.

Built-in functions:

let <name> = <value> - assigns value to name, where value can be an array or int.

print <var> - outputs the value of var to standard out.

define <cmd> = <fn>! ... <fn>! - creates a new function cmd with the specified behaviour.

merge! <var1> <var2> - combines the values of var1 and var2 into a new array.

<fn>! <arr> - calls the list function fn! with arr as the parameter (see below)

See example.doubleu for concrete examples of these functions and their uses.

Explanations of selected list functions:

remove! <arr> - removes an element, chosen at random, from the array

select! <arr> - chooses a random element of the array

mode! <arr> - chooses one of the most frequently occuring elements of the array

average! <arr> - randomly returns either the mean, median, or mode of the array

std! <arr> - calculates the standard deviation of the array

trim! <arr> - calls remove! [arr] a number of times proportional to std! [arr]

normalize! <arr> - calculates and returns the standard score of each element in the array

Explanations of selected numerical functions:

wrap! <n> - creates an array of n elements, each chosen at random from the range [0,1000]

twist! <n> - returns a number in the range [n, 1000] or if n > 1000, the range [0, n]

chain! <n> - chains together a random selection of n commands

How to use the REPL:

Run the REPL using ruby doubleu.rb from the command line. Type the command help! to see the full list of available commands. You can use _ in an expression to substitute the value of the previous command executed. ^C will clear the current line and stop any commands currently running. ^D will exit the REPL.

Options:

Using the -s or --string option will replace string occurences by an array of ints everywhere in the program. For example, "doubleu" would become [100, 111, 117, 98, 108, 101, 117]. This option also works in the REPL.

Using the -p or --print option will output all arrays as strings. -s and -p can be combined to allow string manipulation in Double-U.

Using the -r or --restrict option will ensure that arrays built by build! or wrap! will only contain ints in the range [32-126] (printable ascii).

Arguments:

Arguments can be passed to a Double-U script like this: ruby doubleu.rb <script>.doubleu <arg1> <arg2>.... Arguments can be accessed in a Double-U script using the special variables _1, _2, etc. Be careful though, as these special variables can be overwritten; in a sense they are just like any other variable.

About

A non-deterministic programming language

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages