Special variables

From Rosetta Code
Special variables
You are encouraged to solve this task according to the task description, using any language you may know.

Special variables have a predefined meaning within the programming language. The task is to list the special variables used within the language.


Ada has no special variables in the standard namespace, nor are any such variables commonplace in packages, almost all are constants or private variables changed through functions. The closest thing Ada has to special variables are attributes, which are of an object oriented nature dependant on their prefix. Examples:

  • When X is of an array type, X'First denotes the first index of the array (Ada arrays are not limited to starting at 0 or 1).
  • When X is of a scalar type, X'First denotes the lower bound of that type.
  • X'Size gives the number of bits of memory type X is stored as, but can also be assigned to, to force the program to store the type in that number of bits. (Provided its more than the minimum)
  • For example, a 2 bit record (structure) X might be stored as a byte by default as a speed optimization, but X'Size := 2; would force it to be stored as two bits.

There are far too many attributes to list here, but a standard informative list can be found in Annex K of the documentation if you have it installed. Or Here: Annex K - Language-Defined Attributes


Refer to Built-in Variables for the complete special variables (those variables are global, except noticed).


Works with: ALGOL 68 version Revision 1 - no extensions to language used.
Works with: ALGOL 68G version Any - tested with release 1.18.0-9h.tiny.

<lang algol68>#!/usr/local/bin/a68g --script #

FORMAT f = $g": ["g"]"l$;


 "pi", pi,
 "random", random, # actually a procedure #
 "flip", flip,
 "flop", flop,
 "error char", error char,
 "null character", null character,

CO "NIL", NIL, NIL is not printable END CO

  1. "lengths" details how many distinctive precisions are permitted. #
  2. e.g. int length = 3 suggests 3 distincts types: #
 "bits shorths", bits shorths,
 "bits lengths", bits lengths,
 "bytes shorths", bytes shorths,
 "bytes lengths", bytes lengths,
 "int shorths", int shorths,
 "int lengths", int lengths,
 "real shorths", real shorths,
 "real lengths", real lengths,
 "max abs char", max abs char,
  1. short/long int/real also possible #
 "max int", max int,
 "small real", small real,
 "max real", max real,
  1. "width" indicates how many characters are require to prepresent the value #
  2. short/long bits/bytes/int/real also possible #
 "bits width", bits width,
 "bytes width", bytes width,
 "int width", int width,
 "real width", real width,
 "exp width", exp width


  1. ALL the following are actually procedures #


 "space: [", space, "]", new line,
 "new line: [", new line, "]", new line,
 "new page: [", new page, "]", new line

CO the following are standard, but not implemented in algol68g

 "char number: [", char number, "]", new line,
 "line number: [", line number, "]", new line,
 "page number: [", page number, "]", new line

END CO )); SKIP</lang> Sample output:

pi: [+3.14159265358979e  +0]
random: [+6.08495516447216e  -2]
flip: [T]
flop: [F]
error char: [*]
null character: [bits shorths: [         +1]
bits lengths: [         +3]
bytes shorths: [         +1]
bytes lengths: [         +2]
int shorths: [         +1]
int lengths: [         +3]
real shorths: [         +1]
real lengths: [         +3]
max abs char: [       +255]
max int: [+2147483647]
small real: [+2.22044604925031e -16]
max real: [+1.79769313486235e+308]
bits width: [        +32]
bytes width: [        +32]
int width: [        +10]
real width: [        +15]
exp width: [         +3]
space: [ ]
new line: [
new page: [


Works with: ALGOL 68G version Any - tested with release 1.18.0-9h.tiny.

ALGOL 68G provides some further constants to the scientifically motivated coder: <lang algol68>#!/usr/local/bin/a68g --script #

printf(($g": [", g, "] & [",g,"]"l$,

 "Math constants", "long","long long",
   "pi", long pi, long long pi,
 "Physical Constants", "mksa","cgs",
 "Fundamental constants", "mksa","cgs",
 "  speed of light", mksa speed of light, cgs speed of light,
 "  vacuum permeability", mksa vacuum permeability, "~", # cgs vacuum permeability,#
 "  vacuum permittivity", mksa vacuum permittivity, "~", # cgs vacuum permittivity,#
 "  num avogadro", num avogadro,"~",
 "  faraday", mksa faraday, cgs faraday,
 "  boltzmann", mksa boltzmann, cgs boltzmann,
 "  molar gas", mksa molar gas, cgs molar gas,
 "  standard gas volume", mksa standard gas volume, cgs standard gas volume,
 "  planck constant", mksa planck constant, cgs planck constant,
 "  planck constant bar", mksa planck constant bar, cgs planck constant bar,
 "  gauss", mksa gauss, cgs gauss,
 "  micron", mksa micron, cgs micron,
 "  hectare", mksa hectare, cgs hectare,
 "  miles per hour", mksa miles per hour, cgs miles per hour, 
 "  kilometers per hour", mksa kilometers per hour, cgs kilometers per hour,
 "Astronomy and astrophysics", "mksa","cgs",
 "  astronomical unit", mksa astronomical unit, cgs astronomical unit,
 "  gravitational constant", mksa gravitational constant, cgs gravitational constant,
 "  light year", mksa light year, cgs light year,
 "  parsec", mksa parsec, cgs parsec,
 "  grav accel", mksa grav accel, cgs grav accel,
 "  solar mass", mksa solar mass, cgs solar mass,
 "Atomic and nuclear physics", "mksa","cgs",
 "  electron charge", mksa electron charge, cgs electron charge,
 "  electron volt", mksa electron volt, cgs electron volt,
 "  unified atomic mass", mksa unified atomic mass, cgs unified atomic mass,
 "  mass electron", mksa mass electron, cgs mass electron,
 "  mass muon", mksa mass muon, cgs mass muon,
 "  mass proton", mksa mass proton, cgs mass proton,
 "  mass neutron", mksa mass neutron, cgs mass neutron,
 "  num fine structure", num fine structure,"~",
 "  rydberg", mksa rydberg, cgs rydberg,
 "  bohr radius", mksa bohr radius, cgs bohr radius,
 "  angstrom", mksa angstrom, cgs angstrom,
 "  barn", mksa barn, cgs barn,
 "  bohr magneton", mksa bohr magneton, cgs bohr magneton,
 "  nuclear magneton", mksa nuclear magneton, cgs nuclear magneton,
 "  electron magnetic moment", mksa electron magnetic moment, cgs electron magnetic moment,
 "  proton magnetic moment", mksa proton magnetic moment, cgs proton magnetic moment,
 "Time", "mksa","cgs",
 "  minute", mksa minute, cgs minute,
 "  hour", mksa hour, cgs hour,
 "  day", mksa day, cgs day,
 "  week", mksa week, cgs week,
 "Imperial units", "mksa","cgs",
 "  inch", mksa inch, cgs inch,
 "  foot", mksa foot, cgs foot,
 "  yard", mksa yard, cgs yard,
 "  mile", mksa mile, cgs mile,
 "  mil", mksa mil, cgs mil,
 "Nautical units", "mksa","cgs",
 "  nautical mile", mksa nautical mile, cgs nautical mile,
 "  fathom", mksa fathom, cgs fathom,
 "  knot", mksa knot, cgs knot,
 "Volume", "mksa","cgs",
 "  acre", mksa acre, cgs acre,
 "  liter", mksa liter, cgs liter,
 "  us gallon", mksa us gallon, cgs us gallon,
 "  canadian gallon", mksa canadian gallon, cgs canadian gallon,
 "  uk gallon", mksa uk gallon, cgs uk gallon,
 "  quart", mksa quart, cgs quart,
 "  pint", mksa pint, cgs pint,
 "Mass and weight", "mksa","cgs",
 "  pound mass", mksa pound mass, cgs pound mass,
 "  ounce mass", mksa ounce mass, cgs ounce mass,
 "  ton", mksa ton, cgs ton,
 "  metric ton", mksa metric ton, cgs metric ton,
 "  uk ton", mksa uk ton, cgs uk ton,
 "  troy ounce", mksa troy ounce, cgs troy ounce,
 "  carat", mksa carat, cgs carat,
 "  gram force", mksa gram force, cgs gram force,
 "  pound force", mksa pound force, cgs pound force,
 "  kilopound force", mksa kilopound force, cgs kilopound force,
 "  poundal", mksa poundal, cgs poundal,
 "Thermal energy and power", "mksa","cgs",
 "  calorie", mksa calorie, cgs calorie,
 "  btu", mksa btu, cgs btu,
 "  therm", mksa therm, cgs therm,
 "  horsepower", mksa horsepower, cgs horsepower,
 "Pressure", "mksa","cgs",
 "  bar", mksa bar, cgs bar,
 "  std atmosphere", mksa std atmosphere, cgs std atmosphere,
 "  torr", mksa torr, cgs torr,
 "  meter of mercury", mksa meter of mercury, cgs meter of mercury,
 "  inch of mercury", mksa inch of mercury, cgs inch of mercury,
 "  inch of water", mksa inch of water, cgs inch of water,
 "  psi", mksa psi, cgs psi,
 "Viscosity", "mksa","cgs",
 "  poise", mksa poise, cgs poise,
 "  stokes", mksa stokes, cgs stokes,
 "Light and illumination", "mksa","cgs",
 "  stilb", mksa stilb, cgs stilb,
 "  lumen", mksa lumen, cgs lumen,
 "  lux", mksa lux, cgs lux,
 "  phot", mksa phot, cgs phot,
 "  footcandle", mksa footcandle, cgs footcandle,
 "  lambert", mksa lambert, cgs lambert,
 "  footlambert", mksa footlambert, cgs footlambert,
 "Radioactivity", "mksa","cgs",
 "  curie", mksa curie, cgs curie,
 "  roentgen", mksa roentgen, cgs roentgen,
 "  rad", mksa rad, cgs rad,
 "Force and energy", "mksa","cgs",
 "  newton", mksa newton, cgs newton,
 "  dyne", mksa dyne, cgs dyne,
 "  joule", mksa joule, cgs joule,
 "  erg", mksa erg, cgs erg

))</lang> Output:

Math constants: [long] & [long long]
pi: [+3.141592653589793238462643383e  +0] & [+3.14159265358979323846264338327950288419716939937510582097494459e  +0]
Physical Constants: [mksa] & [cgs]
Fundamental constants: [mksa] & [cgs]
  speed of light: [+2.99792458000000e  +8] & [+2.99792458000000e +10]
  vacuum permeability: [+1.25663706144000e  -6] & [~]
  vacuum permittivity: [+8.85418781700000e -12] & [~]
  num avogadro: [+6.02214199000001e +23] & [~]
  faraday: [+9.64853429775000e  +4] & [+9.64853429775000e  +3]
  boltzmann: [+1.38065040000000e -23] & [+1.38065040000000e -16]
  molar gas: [+8.31447200000000e  +0] & [+8.31447200000000e  +7]
  standard gas volume: [+2.27109810000000e  -2] & [+2.27109810000000e  +4]
  planck constant: [+6.62606930000000e -34] & [+6.62606930000000e -27]
  planck constant bar: [+1.05457168236445e -34] & [+1.05457168236445e -27]
  gauss: [+1.00000000000000e  -4] & [+1.00000000000000e  +0]
  micron: [+1.00000000000000e  -6] & [+1.00000000000000e  -4]
  hectare: [+1.00000000000000e  +4] & [+1.00000000000000e  +8]
  miles per hour: [+4.47040000000000e  -1] & [+4.47040000000000e  +1]
  kilometers per hour: [+2.77777777778000e  -1] & [+2.77777777778000e  +1]
Astronomy and astrophysics: [mksa] & [cgs]
  astronomical unit: [+1.49597870691000e +11] & [+1.49597870691000e +13]
  gravitational constant: [+6.67300000000000e -11] & [+6.67300000000000e  -8]
  light year: [+9.46053620707001e +15] & [+9.46053620707001e +17]
  parsec: [+3.08567758135000e +16] & [+3.08567758135000e +18]
  grav accel: [+9.80665000000000e  +0] & [+9.80665000000000e  +2]
  solar mass: [+1.98892000000000e +30] & [+1.98892000000000e +33]
Atomic and nuclear physics: [mksa] & [cgs]
  electron charge: [+1.60217648700000e -19] & [+1.60217648700000e -20]
  electron volt: [+1.60217648700000e -19] & [+1.60217648700000e -12]
  unified atomic mass: [+1.66053878200000e -27] & [+1.66053878200000e -24]
  mass electron: [+9.10938188000000e -31] & [+9.10938188000000e -28]
  mass muon: [+1.88353109000000e -28] & [+1.88353109000000e -25]
  mass proton: [+1.67262158000000e -27] & [+1.67262158000000e -24]
  mass neutron: [+1.67492716000000e -27] & [+1.67492716000000e -24]
  num fine structure: [+7.29735253300000e  -3] & [~]
  rydberg: [+2.17987196968000e -18] & [+2.17987196968000e -11]
  bohr radius: [+5.29177208300000e -11] & [+5.29177208300000e  -9]
  angstrom: [+1.00000000000000e -10] & [+1.00000000000000e  -8]
  barn: [+1.00000000000000e -28] & [+1.00000000000000e -24]
  bohr magneton: [+9.27400899000000e -24] & [+9.27400899000000e -21]
  nuclear magneton: [+5.05078317000000e -27] & [+5.05078317000000e -24]
  electron magnetic moment: [+9.28476362000000e -24] & [+9.28476362000000e -21]
  proton magnetic moment: [+1.41060663300000e -26] & [+1.41060663300000e -23]
Time: [mksa] & [cgs]
  minute: [+6.00000000000000e  +1] & [+6.00000000000000e  +1]
  hour: [+3.60000000000000e  +3] & [+3.60000000000000e  +3]
  day: [+8.64000000000000e  +4] & [+8.64000000000000e  +4]
  week: [+6.04800000000000e  +5] & [+6.04800000000000e  +5]
Imperial units: [mksa] & [cgs]
  inch: [+2.54000000000000e  -2] & [+2.54000000000000e  +0]
  foot: [+3.04800000000000e  -1] & [+3.04800000000000e  +1]
  yard: [+9.14400000000000e  -1] & [+9.14400000000000e  +1]
  mile: [+1.60934400000000e  +3] & [+1.60934400000000e  +5]
  mil: [+2.54000000000000e  -5] & [+2.54000000000000e  -3]
Nautical units: [mksa] & [cgs]
  nautical mile: [+1.85200000000000e  +3] & [+1.85200000000000e  +5]
  fathom: [+1.82880000000000e  +0] & [+1.82880000000000e  +2]
  knot: [+5.14444444444000e  -1] & [+5.14444444444000e  +1]
Volume: [mksa] & [cgs]
  acre: [+4.04685642241000e  +3] & [+4.04685642241000e  +7]
  liter: [+1.00000000000000e  -3] & [+1.00000000000000e  +3]
  us gallon: [+3.78541178402000e  -3] & [+3.78541178402000e  +3]
  canadian gallon: [+4.54609000000000e  -3] & [+4.54609000000000e  +3]
  uk gallon: [+4.54609200000000e  -3] & [+4.54609200000000e  +3]
  quart: [+9.46352946004000e  -4] & [+9.46352946004000e  +2]
  pint: [+4.73176473002000e  -4] & [+4.73176473002000e  +2]
Mass and weight: [mksa] & [cgs]
  pound mass: [+4.53592370000000e  -1] & [+4.53592370000000e  +2]
  ounce mass: [+2.83495231250000e  -2] & [+2.83495231250000e  +1]
  ton: [+9.07184740000000e  +2] & [+9.07184740000000e  +5]
  metric ton: [+1.00000000000000e  +3] & [+1.00000000000000e  +6]
  uk ton: [+1.01604690880000e  +3] & [+1.01604690880000e  +6]
  troy ounce: [+3.11034750000000e  -2] & [+3.11034750000000e  +1]
  carat: [+2.00000000000000e  -4] & [+2.00000000000000e  -1]
  gram force: [+9.80665000000000e  -3] & [+9.80665000000000e  +2]
  pound force: [+4.44822161526000e  +0] & [+4.44822161526000e  +5]
  kilopound force: [+4.44822161526000e  +3] & [+4.44822161526000e  +8]
  poundal: [+1.38255000000000e  -1] & [+1.38255000000000e  +4]
Thermal energy and power: [mksa] & [cgs]
  calorie: [+4.18680000000000e  +0] & [+4.18680000000000e  +7]
  btu: [+1.05505585262000e  +3] & [+1.05505585262000e +10]
  therm: [+1.05506000000000e  +8] & [+1.05506000000000e +15]
  horsepower: [+7.45700000000000e  +2] & [+7.45700000000000e  +9]
Pressure: [mksa] & [cgs]
  bar: [+1.00000000000000e  +5] & [+1.00000000000000e  +6]
  std atmosphere: [+1.01325000000000e  +5] & [+1.01325000000000e  +6]
  torr: [+1.33322368421000e  +2] & [+1.33322368421000e  +3]
  meter of mercury: [+1.33322368421000e  +5] & [+1.33322368421000e  +6]
  inch of mercury: [+3.38638815789000e  +3] & [+3.38638815789000e  +4]
  inch of water: [+2.49088900000000e  +2] & [+2.49088900000000e  +3]
  psi: [+6.89475729317000e  +3] & [+6.89475729317000e  +4]
Viscosity: [mksa] & [cgs]
  poise: [+1.00000000000000e  -1] & [+1.00000000000000e  +0]
  stokes: [+1.00000000000000e  -4] & [+1.00000000000000e  +0]
Light and illumination: [mksa] & [cgs]
  stilb: [+1.00000000000000e  +4] & [+1.00000000000000e  +0]
  lumen: [+1.00000000000000e  +0] & [+1.00000000000000e  +0]
  lux: [+1.00000000000000e  +0] & [+1.00000000000000e  -4]
  phot: [+1.00000000000000e  +4] & [+1.00000000000000e  +0]
  footcandle: [+1.07600000000000e  +1] & [+1.07600000000000e  -3]
  lambert: [+1.00000000000000e  +4] & [+1.00000000000000e  +0]
  footlambert: [+1.07639104000000e  +1] & [+1.07639104000000e  -3]
Radioactivity: [mksa] & [cgs]
  curie: [+3.70000000000000e +10] & [+3.70000000000000e +10]
  roentgen: [+2.58000000000000e  -4] & [+2.58000000000000e  -8]
  rad: [+1.00000000000000e  -2] & [+1.00000000000000e  +2]
Force and energy: [mksa] & [cgs]
  newton: [+1.00000000000000e  +0] & [+1.00000000000000e  +5]
  dyne: [+1.00000000000000e  -5] & [+1.00000000000000e  +0]
  joule: [+1.00000000000000e  +0] & [+1.00000000000000e  +7]
  erg: [+1.00000000000000e  -7] & [+1.00000000000000e  +0]


There are two types of special variables within AWK: Control variables and Informative variables.

  • dollarint variables - The dollarint special variables represent fields within a record
  • ARGC - An informative variable that provides command line parameter information
  • ARGV - An informative array that provides command line parameter information
  • CONVFMT - A control variable that specifies the conversion format of numerical strings
  • ENVIRON - An informative array that contains the environment strings
  • FILENAME - An informative variable that provides the current input [filename]
  • FNR - An informative variable that provides the record number within the current file
  • FS - A control variable that specifies the input field separator
  • NF - An informative variable that provides the number of fields within the current record
  • NR - An informative variable that provides the total number of records processed
  • OFMT - A control variable that specifies the output format of numerical values
  • OFS - A control variable that specifies the output field separator
  • ORS - A control variable that specifies the output record separator
  • RLENGTH - An informative variable that provides the length of the currently matched substring
  • RS - A control variable that specifies the input record separator
  • RSTART - An informative variable that provides the start index of the currently matched substring
  • SUBSEP - A control variable that specifies the subscript separator for multidimensional arrays


The special (system) variables are as follows:

@%        The number output format control variable 
@cmd$     The command line of a 'compiled' program 
@dir$     The directory (folder) from which the program was loaded 
@flags%   An integer incorporating BBC BASIC's control flags 
@hcsr%    The handle of the mouse pointer (cursor) 
@haccel%  The handle of the keyboard accelerator, if used 
@hevent%  The handle of the event used to prevent blocking in serial I/O 
@hfile%() An array of file handles indexed by channel number 
@hmdi%    The Multiple Document Interface window handle (if any) 
@hwacc%   The window handle to which keyboard accelerator commands should be sent 
@hwnd%    The 'window handle' for the main (output) window 
@hwo%     The handle of the WAVEOUTPUT device 
@hpal%    The handle for the colour palette 
@ispal%   A Boolean which is non-zero if the display is paletted 
@lib$     The directory (folder) containing the library files 
@lparam%  The LPARAM value (for use with ON MOUSE, ON MOVE and ON SYS) 
@memhdc%  The 'device context' for the main (output) window
@midi%    The MIDI device ID (non-zero if a MIDI file is playing) 
@msg%     The MSG value (for use with ON MOUSE, ON MOVE and ON SYS) 
@ox%      The horizontal offset (in pixels) between the output bitmap and the window contents 
@oy%      The vertical offset (in pixels) between the output bitmap and the window contents 
@prthdc%  The 'device context' for the current printer (if any) 
@tmp$     The temporary directory (folder) 
@usr$     The user's Documents directory (folder) 
@vdu%     A pointer to the text and graphics parameters 
@vdu{}    A structure containing the main text and graphics variables 
@wparam%  The WPARAM value (for use with ON MOUSE, ON MOVE and ON SYS) 


The only thing vaguely special are the arguments to a program's main entry point, the main function:<lang C>int main(int argc, char **argv){...}</lang> which provide access to the text of the command that invoked the program. Even those aren't really special: they are normally named argc and argv, though only by convention.

TODO: special variables and constants used when importing stdlib.h, such as "errno"".


In D there are not many special variables, beside a string[] argument of the main function. Variables like the C "errno" are usually not used, despite the C library is available.

One special boolean variable is __ctfe, that is read-only and it's true inside functions when they are evaluated at compile-time, and false otherwise.


DWScript has no special variables in the base language.

Hosts can however define any number of contextual or environmental variables.


In a standard system, there are a handful of predefined variables, such as:

  • BASE contains the current input/output numeric base (default 10 for decimal).
  • STATE is a flag telling whether the system is in interpret or compile mode.

The DO-LOOP construct also has accessors I and J (and sometimes K) for obtaining the loop indices of the inner and outer nested loops.


Go has no special variables in the base language.

A number of the standard packages however, define special variables or constants. Standard error values are common, as are enumeration-like constants for controling functions. Examples of some more frequently used package variables might be io.EOF, os.Args, and os.Stdout.


Like C, there are practically no special variables. The program entry point, main, is the one exception.

Icon and Unicon

Icon and Unicon have special variables known as keywords which are syntactically are preceded by an &. <lang Unicon>

  1. &keyword # type returned(indicators) - brief description
  2. indicators:
  3. * - generates multiple values
  4. = - modifiable
  5. ? - may fail (e.g. status inquiry)
  6. U - Unicon
  7. G - Icon or Unicon with Graphics

&allocated # integer(*) - report memory allocated in total and by storage regions &ascii # cset - ASCII character set &clock # string - time of day &col # integer(=G) - column location of pointer &collections # integer(*) - garbage collection activity in total and by storage region &column # integer(U) - source code column &control # null(?G) - control key state &cset # cset - universal character set &current # co-expression - current co-expression &date # string - today's date &dateline # string - time stamp &digits # cset - digit characters &dump # integer(=) - termination dump &e # real - natural log e &error # integer(=) - enable/disable error conversion/fail on error &errno # integer(?) - variable containing error number from previous posix command &errornumber # integer(?) - error number of last error converted to failure &errortext # string(?) - error message of last error converted to failure &errorvalue # any(?) - erroneous value of last error converted to failure &errout # file - standard error file &eventcode # integer(=U) - program execution event in monitored program &eventsource # co-expression(=U) - source of events in monitoring program &eventvalue # any(=U) - value from event in monitored program &fail # none - always fails &features # string(*) - identifying features in this version of Icon/Unicon &file # string - current source file &host # string - host machine name &input # file - standard input file &interval # integer(G) - time between input events &lcase # cset - lowercase letters &ldrag # integer(G) - left button drag &letters # cset - letters &level # integer - call depth &line # integer - current source line number &lpress # integer(G) - left button press &lrelease # integer(G) - left button release &main # co-expression - main task &mdrag # integer(G) - middle button drag &meta # null(?G) - meta key state &mpress # integer(G) - middle button press &mrelease # integer(G) - middle button release &now # integer(U) - current time &null # null - null value &output # file - standard output file &pick # string (U) - variable containing the result of 3D selection &phi # real - golden ratio &pos # integer(=) - string scanning position &progname # string(=) - program name &random # integer(=) - random number seed &rdrag # integer(G) - right button drag &regions # integer(*) - region sizes &resize # integer(G) - window resize &row # integer(=G) - row location of pointer &rpress # integer(G) - right button press &rrelease # integer(G) - right button release &shift # null(?G) - shift key state &source # co-expression - invoking co-expression &storage # integer(*) - memory in use in each region &subject # string - string scanning subject &syserr # integer - halt on system error &time # integer(=) - elapsed time in milliseconds &trace # integer(=) - trace program &ucase # cset - upper case letters &version # string - version &window # window(=G) - the current graphics rendering window &x # integer(=G) - pointer horizontal position &y # integer(=G) - pointer vertical position

  1. keywords may also fail if the corresponding feature is not present.
  2. Other variants of Icon (e.g. MT-Icon) will have different mixes of keywords.</lang>


special local variables

The names x y u v m n are used as parameters in explicit J definitions:

  y:  right argument
  x:  (optional) left argument
  u:  left argument to an adverb or conjunction
  v:  right argument to a conjunction
  m:  left noun argument to an adverb or conjunction (value error if verb provided)
  n:  right noun argument to a conjunction (value error if verb provided)

Note that the result of an adverb or conjunction that uses either x or y and one of these other names is always a verb. In this case, x and/or y represent arguments passed to the derived verb.

These names may be used as regular names, but that is bad practice except in the context of debugging or illustration.

special global variables

In J 602: Names in locale z are in the path for all locales, including the default locale (base) -- these provide "language features":

ARGV           BINPATH        CR             CRLF           DEL            Debug          
EAV            EMPTY          FF             FIXFONT        FIXFONTWH      IF64           
IFCONSOLE      IFGTK          IFJ6           IFJAVA         IFJHS          IFUNIX         
IFWIN          IFWIN32        IFWINCE        IFWINE         IFWINNT        JVERSION       
LF             LF2            Note           PROFONT        SYSPPC         TAB            
UNAME          adverb         apply          assert         bind           boxopen        
boxxopen       break          bx             clear          coclass        cocreate       
cocurrent      codestroy      coerase        cofullname     coinsert       coname         
conames        conew          conjunction    conl           copath         coreset        
cutopen        datatype       def            define         do             drop           
dyad           each           edit           empty          erase          every          
exit           expand         fetch          inv            inverse        items          
jcwdpath       jhostpath      jpath          jpathsep       jsystemdefs    leaf           
list           load           loadd          loadp          mbopen         mbsave         
monad          nameclass      namelist       names          nc             nl             
noun           on             open           pick           require        rows           
script         scriptd        scripts        setbreak       sign           sminfo         
smoutput       sort           split          startupconsole startupide     table          
take           tmoutput       toCRLF         toHOST         toJ            tolower        
toupper        type           ucp            ucpcount       utf8           uucp           
verb           wcsize         wd             wdbox          wdcenter       wdclipread     
wdclipwrite    wde            wdfit          wdforms        wdget          wdhandler      
wdinfo         wdishandle     wdisparent     wdmove         wdpclose       wdqshow        
wdquery        wdreset        wdselect       wdstatus       winpathsep                    

Names in the locales j and jijs are available by explicity referencing those locales and are used to provide "system features" and "ide features":

BOXES              BROWSER            CONFIRMCLOSE       DIRTREEX           DISPLAYLOAD        
EPSREADER          FORMAT             FORMSIZES          GetSystemMetrics   IFJIJX             
INPUTLOG           INPUTLOGFILE       LOADED             P2UPFONT           PATHJSEP           
PATHSEP            PDFREADER          PRINTERFONT        PRINTOPT           PUBLIC             
READONLY           SCRIPTS            SHOWSIP            SMPRINT            SM_CMONITORS       
SYSTEMFOLDERS      TARGET             USERFOLDERS        WINPOS             XDIFF              
addfname           boxdraw            buildpublic        classwizard        cleantable         
config             cutnames           deb                debug              demos              
dirmatch           dltb               edit               editfind           editinputlog       
editinputprompt    exist              extijs             fexist             fif                
filenewform        fileprint          fileprintsetup     filex              fixWINPOS          
formedit           formeditrun        forms              fullname           getinputlog        
getpath            getscripts         gettarget          gettargetlocale    globaldefs         
gridwizard         help               htmlhelp           jpath              lab                
lastactive         loadp              open               openfiles          origin             
pacman             printfiles         prints             projectmanager     save               
saveuserfolders    scriptmake         scripts            wpreset            wpsave             
EMPTY                      FIXFONTDEF                 FKEYS                      
FTYPES                     IFIOX                      IFMAX                      
IFREADONLY                 IFSAVED                    IFSHOW                     
JIJS                       JIJSMAC                    JRECENT                    
NEWUSER                    PPSCRIPT                   QFORMX                     
RECENT                     RECENTFILE                 RECENTLOC                  
RECENTMAX                  SCMP                       SMBLK                      
SMDESK                     SMHWNDP                    SMINIT                     
SMNAME                     SMPATH                     SMSEL                      
SMSIZE                     SMSTYLE                    SMTEXT                     
SMTORG                     aboutj                     boxfkeys                   
boxskeys                   checkreadonly              cleartemp                  
close                      closeijs                   closeijx                   
closewindows               comparesvn                 create                     
cutpara                    deb                        destroy                    
exitijs                    filecase                   fkeycase                   
fkeylist                   fkeyrun                    fkeyselect                 
fkeyselect1                flerase                    flexist                    
flopen                     flread                     flwrite                    
foldpara                   foldtext                   getSMSEL                   
getactsize                 getcascade                 getcascade1                
getcascades                getfile                    getformx                   
getline                    getsaveas                  getscrollpos               
getselection               getskey                    id2loc                     
id2name                    id2names                   id2type                    
ide_maximize               ide_minimize               ide_restore                
ifshiftkey                 iftempscript               info                       
intn                       jijs_aboutj_button         jijs_actrl_fkey            
jijs_bctrl_fkey            jijs_bctrlshift_fkey       jijs_cancel                
jijs_close                 jijs_close_button          jijs_dctrl_fkey            
jijs_default               jijs_demos_button          jijs_ectrl_fkey            
jijs_ectrlshift_fkey       jijs_editconfigure_button  jijs_editcopy_button       
jijs_editcut_button        jijs_editdirmatch_button   jijs_editexport_button     
jijs_editfif_button        jijs_editfind_button       jijs_editformedit_button   
jijs_editinputlog_button   jijs_editlint_button       jijs_editpaste_button      
jijs_editreadonly_button   jijs_editredo_button       jijs_editselectall_button  
jijs_editundo_button       jijs_f1_fkey               jijs_f1ctrl_fkey           
jijs_f1shift_fkey          jijs_fctrl_fkey            jijs_fctrlshift_fkey       
jijs_filecleartemp_button  jijs_fileexit_button       jijs_filenewclass_button   
jijs_filenewijs_button     jijs_fileopen_button       jijs_fileopensystem_button 
jijs_fileopenuser_button   jijs_fileprint_button      jijs_fileprintsetup_button 
jijs_filerecent_button     jijs_fkeys_button          jijs_forms_button          
jijs_gctrl_fkey            jijs_hctrl_fkey            jijs_helpconstants_button  
jijs_helpcontext_button    jijs_helpcontrols_button   jijs_helpdictionary_button 
jijs_helpforeigns_button   jijs_helpgeneral_button    jijs_helpgl2cmd_button     
jijs_helphelp_button       jijs_helpindex_button      jijs_helpphrases_button    
jijs_helpprimer_button     jijs_helprelease_button    jijs_helprelnotes_button   
jijs_helpuser_button       jijs_helpvocab_button      jijs_helpwdcmd_button      
jijs_helpwdover_button     jijs_ictrl_fkey            jijs_jctrl_fkey            
jijs_kctrl_fkey            jijs_kctrlshift_fkey       jijs_labadvance_button     
jijs_labauthor_button      jijs_labchapters_button    jijs_labs_button           
jijs_lctrl_fkey            jijs_lctrlshift_fkey       jijs_max_button            
jijs_mctrl_fkey            jijs_nctrl_fkey            jijs_nctrlshift_fkey       
jijs_octrl_fkey            jijs_pctrl_fkey            jijs_qctrl_fkey            
jijs_rctrl_fkey            jijs_rctrlshift_fkey       jijs_rundebug_button       
jijs_runfile_button        jijs_runfiled_button       jijs_runline_button        
jijs_runpacman_button      jijs_runprojman_button     jijs_runselection_button   
jijs_runwindow_button      jijs_runwindowd_button     jijs_save_button           
jijs_saveas_button         jijs_sctrl_fkey            jijs_sellower_button       
jijs_selminus_button       jijs_selplus_button        jijs_selplusline1_button   
jijs_selplusline2_button   jijs_selsort_button        jijs_seltoggle_button      
jijs_selupper_button       jijs_selwrap_button        jijs_tctrl_fkey            
jijs_tile_button           jijs_tileacross_button     jijs_tilecascade_button    
jijs_togglebox_button      jijs_wctrl_fkey            jijs_wctrlshift_fkey       
jrecent_cancel             jrecent_close              jrecent_enter              
jrecent_lb_button          jrecent_open_button        jrecent_run                
jrecent_run_button         jrecent_rund_button        jrecent_view_button        
lint                       marksavedid                name2id                    
new                        newijs                     newijx                     
nounrep                    openijs                    parentname                 
pathname                   pmovex                     qsmact                     
qsmall                     qsmallforms                qsmallijs                  
qsmlastijs                 qsmlastxs                  qsmout                     
qsmsize                    query                      quote                      
rdist                      readid                     readid16                   
readonlydefault            recent_open                recent_put                 
recent_read                recent_run                 recent_save                
resizefont                 restorefont                roundint                   
runcompare                 runexport                  runfile                    
runimmx0                   runimmx1                   runline                    
runselection               runwindow                  save                       
saveas                     saveopenwindows            scmp_cancel                
scmp_close                 scmp_close_button          scmp_current_button        
scmp_original_button       scmp_revert_button         scmp_run                   
scmp_show                  select_line                select_text                
set_fkeys                  set_skey1                  set_skeys                  
setfontall                 setpnall                   setreadonly                
sh                         smappend                   smclose                    
smfocus                    smfocusact                 smfocusout                 
smgetsel                   smmove                     smopen                     
smprompt                   smread                     smreplace                  
smsave                     smscroll                   smsel                      
smselact                   smselout                   smsetcmd                   
smsetsaved                 smsetselect                smwrite                    
sysmodifiers               tile                       tile2fit                   
tile2fit1                  tileacross                 tilecascade                
tileget                    todelim                    tofoldername               
togglebox                  togglereadonly             togglexs                   
tolist                     topara                     ucpboxdraw                 
unboxfkeys                 unboxskeys                 winmax                     


this evaluates to the object the immediately enclosing function was called on as a method, if it was. If it was not called as a method, this is either the global environment object (usually window in browsers) in non-strict mode, or undefined in strict mode. this is an expression resembling a variable, but not actually a variable; for example, it is a syntax error to assign to it.

<lang javascript>var obj = {

 foo: 1,
 bar: function () { return this.foo; }

}; obj.bar(); // returns 1</lang>

When a function is entered, the variable arguments is bound to an “arguments object” which is an array-like object containing the function's arguments, as well as some other information. This how varargs functions are implemented in JavaScript. If the function's parameters contain “arguments” explicitly, then it is not overridden and functions as an ordinary parameter.

<lang javascript>function concat() {

 var s = "";
 for (var i = 0; i < arguments.length; i++) {
   s += arguments[i];
 return s;

} concat("a", "b", "c"); // returns "abc"</lang>


<lang Mathematica>Grid[Partition[Names["$*"],4]] -> $Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AllowDataUpdates $AllowDocumentationUpdates $AllowInternet $AssertFunction $Assumptions $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $Inspector $InstallationDate $InstallationDirectory $InstalledServices $InterfaceEnvironment $InternetProxyRules $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $Packages $PacletSite $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $PrintServiceRequest $PrintServiceResponse $PrintShortErrorMessages $PrintWSDLDebug $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserBasePacletsDirectory $UserDocumentsDirectory</lang>


<lang maxima>/* There are many special variables in Maxima: more than 250 are used for options, for example */ fpprec; /* precision for big floats */ obase; /* number base for output */

/* Other variables are read-only, and give the list of user-defined variables, functions... */ infolists; /* give the names of all available lists */ [labels, values, functions, macros, arrays, myoptions, props, aliases, rules, gradefs, dependencies, let_rule_packages, structures]</lang>



<lang ML/I>MCSKIP "WITH" NL "" Special variables "" There are four different kinds of variables in ML/I. "" Permanent (P) variables - these have no special predefined values. "" Character (C) variables - these have no special predefined values. "" Temporary (T) variables - a macro has at least three of these, and "" those have predefined values. "" System (S) variables - these are for control and status. The number "" of these is implementation dependent. MCSKIP MT,<> MCINS %. MCDEF TVARDEMO , NL AS <T-variables are local to the current macro call T1 is the number of arguments to current macro call - value is %T1. T2 is the number of macro calls so far - value is %T2. T3 is the current depth of nesting - value is %T3. > TVARDEMO xxx,yyy

MCDEF SVARDEMO WITHS NL AS <The first nine S-variables are implementation independent S1 controls startline insertion - value is %S1. S2 is the current source text line number - value is %S2. S3 controls error messages related to warning markers - value is %S3. S4 controls context printout after a <MCNOTE> - value is %S4. S5 is the count of processing errors - value is %S5. S6 enables the definition of an atom to be changed - value is %S6. S7, S8 and S9 are currently unused.

All other S-variables have implementation defined meanings. > SVARDEMO</lang>


<lang ML/I>T-variables are local to the current macro call T1 is the number of arguments to current macro call - value is 2 T2 is the number of macro calls so far - value is 5 T3 is the current depth of nesting - value is 1

The first nine S-variables are implementation independent S1 controls startline insertion - value is 0 S2 is the current source text line number - value is 32 S3 controls error messages related to warning markers - value is 0 S4 controls context printout after a MCNOTE - value is 0 S5 is the count of processing errors - value is 0 S6 enables the definition of an atom to be changed - value is -1 S7, S8 and S9 are currently unused.

All other S-variables have implementation defined meanings.</lang>


For convenience, NetRexx provides some special names for naming commonly-used concepts within terms. These are only recognized if there is no variable of the same name previously seen in the current scope.

The current set of special names includes: ask, class, digits, form, length, null, source, sourceline, super, this, trace, version.

<lang NetRexx>/* NetRexx */ options replace format comments java crossref savelog symbols binary

class RCSpecialVariables

method RCSpecialVariables()

 x = super.toString
 y = this.toString
 say '<super>'x'</super>'
 say '<this>'y'</this>'
 say '<class>'RCSpecialVariables.class'</class>'
 say '<digits>'digits'</digits>'
 say '<form>'form'</form>'
 say '<[1, 2, 3].length>'
 say [1, 2, 3].length
 say '</[1, 2, 3].length>'
 say '<null>'
 say null
 say '</null>'

say '



 say '<sourceline>'sourceline'</sourceline>'
 say '<trace>'trace'</trace>'
 say '<version>'version'</version>'
 say 'Type an answer:'
 say '<ask>'ask'</ask>'

method main(args = String[]) public static



<class>class RCSpecialVariables</class>
<[1, 2, 3].length>
</[1, 2, 3].length>

<source>Java method RCSpecialVariables.nrx</source>
<version>NetRexx 3.00 11 Jun 2011</version>
Type an answer:


Some predefined variables from the Sys module:

<lang ocaml>val argv : string array (** The command line arguments given to the process.

  The first element is the command name used to invoke the program.
  The following elements are the command-line arguments
  given to the program. *)

val executable_name : string (** The name of the file containing the executable currently running. *)

val interactive : bool ref (** This reference is initially set to [false] in standalone

  programs and to [true] if the code is being executed under
  the interactive toplevel system [ocaml]. *)

val os_type : string (** Operating system currently executing the Caml program. One of - ["Unix"] (for all Unix versions, including Linux and Mac OS X), - ["Win32"] (for MS-Windows, OCaml compiled with MSVC++ or Mingw), - ["Cygwin"] (for MS-Windows, OCaml compiled with Cygwin). *)

val word_size : int (** Size of one word on the machine currently executing the Caml

  program, in bits: 32 or 64. *)

val max_string_length : int (** Maximum length of a string. *)

val max_array_length : int (** Maximum length of a normal array. The maximum length of a float

   array is [max_array_length/2] on 32-bit machines and
   [max_array_length] on 64-bit machines. *)

val ocaml_version : string (** [ocaml_version] is the version of Objective Caml.

   It is a string of the form ["major.minor[.patchlevel][+additional-info]"],
   where [major], [minor], and [patchlevel] are integers, and
   [additional-info] is an arbitrary string. The .patchlevel and
   +additional-info parts may be absent. *)</lang>

Some predefined variables from the Pervasives module:

<lang ocaml>val max_int : int (** The greatest representable integer. *)

val min_int : int (** The smallest representable integer. *)

val max_float : float (** The largest positive finite value of type [float]. *)

val min_float : float (** The smallest positive, non-zero, non-denormalized value of type [float]. *)

val epsilon_float : float (** The difference between [1.0] and the smallest exactly representable

   floating-point number greater than [1.0]. *)</lang>


There are three special variables in GP: Pi (3.14...), Euler (Euler's gamma), and I (the imaginary unit).

PARI has many special variables. Probably the most important is avma, the current stack pointer, and the related top and bot; see section 4.3 of the User's Guide to the PARI Library.

Other important special variables are:

  • Universal objects gen_0, gen_1, gen_2, gen_m1, gen_m2, ghalf, and gnil. (The manual erroneously omits the last on this list.) These can be identified with is_universal_constant(). Note that gen_I is not a universal object but a function.
  • Prime-related variables _maxprime (traditionally accessed via maxprime()) and diffptr
  • Others: precdl, overflow, hiremainder, ...

The PARI developer's guide lists two more:

  • PARI_SIGINT_block: When this is nonzero, SIGINT is blocked.
  • PARI_SIGINT_pending: When this is nonzero, a SIGINT has been blocked but not yet handled.


  • $. sequence number
  • $,
  • $;
  • $_ default variable
  • $"
  • $#
  • $*
  • $+ last substring matched to a regular expression subpattern
  • $0
  • $/
  • $\
  • $|
  • $& string matched by last regular expression
  • $' substring following last matched regular expression
  • $` substring preceding last matched regular expression
  • %ENV associative container holding the environment variables
  • %SIG
  • @+
  • @-
  • @ARGV array containing the command line parameters
  • @F
  • @INC library search path

Perl 6

It is probably useful to briefly explain normal variables in Perl 6 before tackling special variables.

Variables in Perl 6 have a prefix sigil to distinguish them from named subroutines, functions, classes, and so on. There is a system of sigils to mark the fundamental structural type of the variable: <lang perl6> $foo scalar (object)

@foo   ordered array
%foo   unordered hash (associative array)
&foo   code/rule/token/regex
::foo  package/module/class/role/subset/enum/type/grammar</lang>

Sigils indicate overall interface, not the exact type of the bound object. Different sigils imply different minimal abilities. Ordinary sigils indicate normally scoped variables, either lexical or package scoped. Oddly scoped variables include a secondary sigil (a twigil) that indicates what kind of strange scoping the variable is subject to: <lang perl6> $foo # ordinary scoping

$.foo              # object attribute public accessor
$^foo              # self-declared formal positional parameter
$:foo              # self-declared formal named parameter
$*foo              # dynamically overridable global variable
$?foo              # compiler hint variable
$=foo              # Pod variable
$<foo>             # match variable, short for $/{'foo'}
$!foo              # object attribute private storage
$~foo              # the foo sublanguage seen by the parser at this lexical spot</lang>

Special Variables:

Perl 6 has deprecated most of the "line-noise" variables from Perl 5 in favor of named variables.

<lang perl6> $_ # The implicit variable lexically scoped to the current block

@_                # Implicit array of parameters to the current block. Still available but rarely used or needed with the improved sub signatures
$!                # Current Exception object
$/                # Last match
$0, $1, $2...     # Captured values from match: $/[0], $/[1], $/[2] ...
$?ARCH            # Host architecture
$?XARCH           # Target architecture
@*ARGS            # command-line arguments
$*ARGFILES        # The magic command-line input handle
&?BLOCK           # current block (itself)
::?CLASS          # current class (as package or type name)
$?CLASS           # current class
@=COMMENT         # All the comment blocks in the file
%?CONFIG          # configuration hash 
$*CWD             # current working directory
$=DATA            # data block handle (=begin DATA ... =end)
@=DATA            # Same as above, but array
%?DEEPMAGIC       # Controls the mappings of magical names to sub definitions
$?DISTRO          # Which OS distribution am I compiling under
$*DISTRO          # Which OS distribution am I running under
$*EGID            # effective group id
%*ENV             # system environment variables
$*ERR             # Standard error handle
$*EUID            # effective user id
$*EXECUTABLE_NAME # executable name
$?FILE            # current filename of source file
$?GRAMMAR         # current grammar
$*GID             # group id
$*IN              # Standard input handle; is an IO object
@*INC             # where to search for user modules (but not std lib!)
$?KERNEL          # operating system compiled for
$*KERNEL          # operating system running under
%?LANG            # What is the current set of interwoven languages?
$*LANG            # LANG variable from %*ENV that defines what human language is used
$?LINE            # current line number in source file
%*META-ARGS       # Meta-arguments
$?MODULE          # current module
%*OPTS            # Options from command line
%*OPT...          # Options from command line to be passed down
$*OUT             # Standard output handle
$?PACKAGE         # current package
$?PERL            # Which Perl am I compiled for?
$*PERL            # perl version running under
$*PID             # system process id
%=POD             # POD
$*PROGRAM_NAME    # name of the Perl program being executed
%*PROTOCOLS       # Stores the methods needed for the uri() function
::?ROLE           # current role (as package or type name)
$?ROLE            # current role
&?ROUTINE         # current sub or method (itself)
$?SCOPE           # Current "my" scope
$*TZ              # Local time zone
$*UID             # system user id
$?USAGE           # Default usage message generated at compile time
$?VM              # Which virtual machine am I compiling under
$?XVM             # Which virtual machine am I cross-compiling for</lang>

Also, not really a variable but... <lang perl6> * # A standalone term that has no fixed value, instead it captures the notion of "Whatever",

   # the meaning of which is decided lazily by whatever it is an argument to.
   # See the "*" section of http://perlcabal.org/syn/S02.html#Built-In_Data_Types</lang>


PicoLisp has no special variables, but some naming conventions concerning the "meaning" of a variable's (i.e. symbol's) value:

- Global variables start with an asterisk '*'
- Functions and other global symbols start with a lower case letter
- Locally bound symbols start with an upper case letter
- Local functions start with an underscore '_'
- Classes start with a plus-sign '+', where the first letter
   - is in lower case for abstract classes
   - and in upper case for normal classes
- Methods end with a right arrow '>'
- Class variables may be indicated by an upper case letter

For historical reasons, the global constant symbols 'T' and 'NIL' do not obey these rules, and are written in upper case.


PureBasic has no 'special variables'. It does define constants that reflect compiler settings that can be tested and used as a part of compiling. All other non-explicitly declared values that vary during runtime are returned by functions.


By default, Python starts execution in a namespace which has direct access to names defined in the globals() dict and the __builtins__ dict. The members of which can be found by the following code: <lang Python>names = sorted((set(globals().keys()) | set(__builtins__.__dict__.keys())) - set('_ names i'.split())) print( '\n'.join(' '.join(names[i:i+8]) for i in range(0, len(names), 8)) )</lang>

ArithmeticError AssertionError AttributeError BaseException BufferError BytesWarning DeprecationWarning EOFError
Ellipsis EnvironmentError Exception False FloatingPointError FutureWarning GeneratorExit IOError
ImportError ImportWarning IndentationError IndexError KeyError KeyboardInterrupt LookupError MemoryError
NameError None NotImplemented NotImplementedError OSError OverflowError PendingDeprecationWarning ReferenceError
ResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarning SystemError SystemExit
TabError True TypeError UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError
UnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError __build_class__ __builtins__
__debug__ __doc__ __import__ __name__ __package__ abs all any
ascii bin bool bytearray bytes callable chr classmethod
compile complex copyright credits delattr dict dir divmod
enumerate eval exec exit filter float format frozenset
getattr globals hasattr hash help hex id input
int isinstance issubclass iter len license list locals
map max memoryview min next object oct open
ord pow print property quit range repr reversed
round set setattr slice sorted staticmethod str sum
super tuple type vars zip


The REXX language has three special variables:

  • RC
  • SIGL

Each may be used as regular variables, they aren't reserved keywords or variable names.

  • RC [the return code from commands issued to the host.]
  • RESULT [the result return from a subroutine or function.]
  • SIGL [the source line # that did the transfer of control.]

In each case, the variable names may be in lower/upper/mixed case. <lang rexx>/*REXX program to demonstrate REXX special variables: RC, RESULT, SIGL. */

                          /*line two.  */
                          /*line three.*/             say copies('=',75)

rc=1/3 /*line four. */ signal youWho /*line five. */ myLoo='this got skipped' /*line six. */ youwho: /*line seven.*/ say 'SIGL=' sigl say 'REXX source statement' SIGL '=' sourceline(sigl)

                                                      say copies('=',75)

g=44 call someFunc g say 'rc=' rc say 'result=' result

                                                      say copies('=',75)

h=66 hh=someFunc(h) say 'rc=' rc say 'result=' result say 'hh=' hh

                                                      say copies('=',75)

'DIR C:\ /ad | find /i /v "Volume " ' say 'rc=' rc say 'result=' result

                                                      say copies('=',75)

exit /*stick a fork in it, we're done.*/ /*───────────────────────────────────someFunc subroutine.───────────────*/ someFunc: procedure; parse arg x; return x/2</lang> output

REXX source statement 5 = signal youWho              /*line five. */
rc= 0.333333333
result= 22
rc= 0.333333333
result= 22
hh= 33

 Directory of C:\

04/26/2012  01:51    <DIR>          bigFacts
12/16/2005  19:54    <DIR>          Documents and Settings
04/26/2012  01:51    <DIR>          gon
12/16/2005  20:16    <DIR>          Program Files
04/14/2010  19:58    <DIR>          Recycled
12/16/2005  19:42    <DIR>          WINDOWS
               0 File(s)              0 bytes
               7 Dir(s)   4,697,964,544 bytes free
rc= 0
result= 22


Talking about special (reserved) names, there are:

  • self - the current method's receiver
  • super - ditto, but different message send lookup
  • thisContext - the current stackframe/aka active continuation

Everything else is found via the lexical scope ending in bindings in a namespace. The global default namespace is called "Smalltalk" and contains (beside bindings for all classes by name) the singletons:

  • true
  • false
  • nil

Technically, these could be redefined, but the system would not work if any of them was. Therefore most compilers refuse code which obviously attempts to do so, and we can think of them as being reserved names as well. Global binding names are returned by <lang smalltalk>Smalltalk keys</lang> Things like the shell environment, command line argument, version numbers etc. are usually not exposed via globals, but instead held in private class variables (static variables), which can be accessed via getter messages (which, by the way, makes it easier to insert a dialect compatibility layer). An example for this would be: <lang smalltalk>Float precision</lang> or <lang smalltalk>Smalltalk version</lang>

Name conventions:

  • class names - upperCase first
  • class variables (statics) - ditto
  • shared pool variables - ditto
  • all other variables (incl. instance variables) - lowercase first
  • method names - lowercase first; except for constant/parameter getters, which are sometimes uc-first


There are three major categories of special variables in Tcl: global variables special to the Tcl language, global variables set by Tcl-based interpreters, and local variables with special interpretations.

Language Globals

These variables are defined by the standard implementation of Tcl, and are present in all Tcl interpreters by default.

This global array is Tcl's interface to the process's environment variables.
This global scalar holds a machine-readable description of the last error to occur. (Note that prior to Tcl 8.6, internally-generated exceptions often used NONE for this value.)
This global scalar holds a stack trace from the last error to occur.
This global scalar holds the location of Tcl's own internal library.
tcl_version, tcl_patchLevel
This global scalar holds the version of Tcl in use. From Tcl 8.5 onwards, these hold the same (detailed) value.
This global scalar holds a Tcl list of directories where Tcl looks for packages by default. This is used to initialize the auto_path global variable.
This global scalar holds a Tcl list of directories where Tcl looks for packages (and auto-loaded scripts, though this facility is deprecated).
This global array holds a description of the platform on which Tcl is executing.
This global scalar holds the number of significant figures to use when converting a floating-point value to a string by default. From Tcl 8.5 onwards it should not be changed. (If you are thinking of using this, consider using the format command instead.)
This global scalar holds the name of a file to source when the interpreter starts in interactive mode.
This global scalar is only used on classic Mac OS (now deprecated); consult the documentation for more information.
If enabled at library configuration time, this global scalar allows tracing of the compilation of bytecode in the interpreter.
If enabled at library configuration time, this global scalar allows tracing of the execution of bytecode in the interpreter.
tcl_wordchars, tcl_nonwordchars
These global scalars hold regular expression fragments that describe the current platform's interpretation of what is and isn't a word.

Interpreter Globals

These global variables are only features of the most common Tcl-based shells, tclsh and wish.

This global scalar holds the number of arguments (after the script) passed to the Tcl interpreter.
This global scalar holds a Tcl list of the arguments (after the script) passed to the Tcl interpreter.
This global scalar holds the name of the main script to execute that was passed to the Tcl interpreter, or the name of the interpreter itself in interactive mode.
This global scalar holds whether this interpreter is working in interactive mode (i.e., needs to print command prompts, run a REPL, etc.)
tcl_prompt1, tcl_prompt2
These global scalars allow customization of the prompt strings in interactive mode.

This global scalar holds the user-supplied preferred dimensions of the initial window. Only used by interpreters that load the Tk library.

Local Special Variables

This is a language feature of procedures.

This local variable holds the Tcl list of arguments supplied to the current procedure after all the other formal arguments have been satisfied. Note that it needs to be explicitly listed in the formal arguments and be last in the list of formal arguments to have this behavior.

UNIX Shell

The following variables are reserved for special purposes within the Bourne shell:

  • $0 the invoked command positional variable
  • $1 the first positional variable
  • $2 the second positional variable
  • $3 the third positional variable
  • $4 the fourth positional variable
  • $5 the fifth positional variable
  • $6 the sixth positional variable
  • $7 the seventh positional variable
  • $8 the eighth positional variable
  • $9 the nineth positional variable
  • $* the dollarstar expands to all command line arguments
  • $@ the dollarsnail expands to all command line arguments
  • $# the dollarhash expands to the number of command line arguments given
  • $? the dollarhook expands to the exit status of the last command executed
  • $- a list of all options used to invoke the shell
  • $$ the pid of the currentprocess
  • $! the pid of the last command executed as a background process
  • CDPATH Additional locations to be searched by the cd command
  • HOME The default working directory of the current user
  • IFS Internal field separator. This contains space,tab and newline characters
  • LANG Determines the default locale in the absence of other locale related environment variables
  • LC_ALL High precedence override for locale specific behaviour
  • LC_CTYPE Determines locale specific character classification
  • LOGNAME The login name of the user
  • MAIL The full pathname of the users mail file
  • MAILCHECK The time limit that the shell timer uses before checking for new mail
  • PATH The shell search path
  • PPID
  • PS1 Primary system prompt
  • PS2 Secondary system prompt
  • PS3 Ternary system prompt
  • PS4 Forth system prompt
  • PWD Current working directory
  • SHELL The name of the current shell
  • TERM The current terminal type
  • TZ The current timezone
  • USER The current username
  • underscore

ZX Spectrum Basic

The ZX Spectrum uses single letter variables names. None of these are special variables. There are a set of system variables held at a fixed memory addresses, which can be accessed via PEEK and POKE functions. The system variables and addresses are:

  • 23552 KSTATE - Keyboard state.
  • 23560 LAST K - Newly pressed key.
  • 23561 REPDEL - Delay (in 50ths of a second) before keyboard starts repeating.
  • 23562 REPPER - Delay (in 50ths of a second) between keyboard repetions.
  • 23563 DEFADD - Address of arguments for a user defined function.
  • 23565 K DATA - Second byte of colour controls sequences from keyboard.
  • 23566 TVDATA - Colour and location information for television set.
  • 23568 STRMS - Addresses of channels attached to streams.
  • 23606 CHARS - 256 less than the address of the current character set
  • 23608 RASP - Length of the warning buzz.
  • 23609 PIP - Length of the keyboard click.
  • 23610 ERR NR One less than the error code and starts at 255 (for -1)
  • 23611 FLAGS - Various flags to control the BASIC system.
  • 23612 TV FLAG - Flags associated with the television output.
  • 23613 ERR SP - Address of item on machine stack to be used as error return.
  • 23615 LIST SP - Return address from automatic listing.
  • 23617 MODE - Cursor type
  • 23618 NEWPPC - Line number to be jumped to.
  • 23620 NSPPC - Statement number in line to be jumped to
  • 23621 PPC - Line number of statement currently being executed.
  • 23623 SUBPPC - Statement number within the line that is currently being executed.
  • 23624 BORDCR - Colour of the border (overscan area) and input area (times 8)
  • 23625 E PPC - Current line number (for list editing)
  • 23627 VARS - Address of the variables.
  • 23629 DEST - Address of variable in assignment.
  • 23631 CHANS - Address of channel data.
  • 23633 CURCHL - Address of information being used for input and output.
  • 23635 PROG - Address of the BASIC program.
  • 23637 NXTLIN - Address of the next line in the program.
  • 23639 DATADD - Address of terminator of the last DATA item.
  • 23641 E LINE - Address of command being typed in.
  • 23643 K CUR - Address of the cursor.
  • 23645 CH ADD - Address of the next character to be interpreted
  • 23647 X PTR - Address of the character after the syntax error marker.
  • 23649 WORKSP - Address of temporary work space.
  • 23651 STKBOT - Address of bottom of calculator stack.
  • 23653 STKEND - Address of start of free space.
  • 23655 BREG - The B register of the calculator.
  • 23656 MEM - Address of area used for calculator memory.
  • 23658 FLAGS2 - Miscellaneous flags.
  • 23659 DF SZ - The number of lines in the input area.
  • 23660 S TOP - The number of the top program line in automatic listings.
  • 23662 OLDPPC - Line number to which CONTINUE jumps.
  • 23664 OSPPC - Number within line of statement to which CONTINUE jumps.
  • 23665 FLAGX - Various flags.
  • 23666 STRLEN - Length of string type destination in assignment.
  • 23668 T ADDR - Address of next item in the syntax table.
  • 23670 SEED - The random number seed.
  • 23672 FRAMES - A 3 byte frame counter incremented every 20ms.
  • 23675 UDG - Address of the user defined graphics
  • 23677 COORDS Coordinates of the last point plotted.
  • 23679 P POSN - Column number for the position of the printer carriage.
  • 23680 PR CC - Address of next free position in the printer buffer.
  • 23682 ECHO E - Column and line number positions in the input buffer.
  • 23684 DF CC - Display address for the current print position.
  • 23686 DFCCL - Display address in the input area.
  • 23688 S POSN - Column and row number of the print position.
  • 23690 SPOSNL - Column and row number for the print position in the input area.
  • 23692 SCR CT - Scroll counter - Number of lines left before stopping with Scroll?
  • 23693 ATTR P - Permanent current colours attributes
  • 23694 MASK P - Permanent current colour attribute mask
  • 23695 ATTR T - Temporary current colour attributes
  • 23696 MASK T - Temporary current colour attribute mask
  • 23697 P FLAG - More flags.
  • 23698 MEMBOT - Memory area address used by the calculator
  • 23728 NMIADD - The address of the users Non Maskable Interrupt service routine.
  • 23730 RAMTOP - Address of last byte of BASIC system area.
  • 23732 P-RAMT - Address of last byte of physical RAM.

<lang zxbasic>10 PRINT "The border colour is "; PEEK (23624): REM bordcr 20 PRINT "The ramtop address is "; PEEK (23730) + 256 * PEEK (23731): REM ramtop 30 POKE 23609,50: REM set keyboard pip to 50</lang>