TRAC is a purely text-based language — a kind of
macro language. Unlike traditional
ad hoc macro languages of the time, such as those found in assemblers, TRAC is well planned, consistent, and in many senses complete. It has explicit input and output operators, unlike the typical implicit I/O at the outermost macro level, which makes it simultaneously simpler and more versatile than older macro languages. TRAC is a text-processing language, also called a string processing language. Because of this the only data type available is a string of characters. Numbers are strings of digits, with integer arithmetic (without specific limits on maximum values) being provided through built-in ("primitive") functions which operate on their string representation. Arguably, one aspect of its completeness is that the concept of an error is limited to events like lack of file space and requesting expansion of a string longer than the interpreter's working storage; what would in many languages be described as illegal operations are dealt with in TRAC by defining a result (often a null string) for every possible combination of a function's argument strings. TRAC is, like
APL or
LISP, an
expression oriented language (in contrast to more typical
procedure-oriented languages) but, unlike APL, it completely lacks operators. In most respects, it is a case of pure
functional programming. It has, in common with LISP, a syntax that generally involves the presence of many levels of nested parentheses. TRAC is
homoiconic: that is, a TRAC program can be represented and manipulated within the TRAC language itself. The emphasis on strings as the single data type is so strong that TRAC provides mechanisms for handling the language's own syntactic characters either in their syntactic roles or like any other character, and
self-modifying code has more the feel of a natural consequence of typical TRAC programming techniques than of being a special feature. The main inspiration for TRAC came from three papers by
Douglas McIlroy. == Intellectual property ==