cmat ← {attributes} ##.attrib namelist ⍝ Function/operator attributes. The right argument is a namelist of functions or operators and the optional left argument, a character vector of the attributes to be displayed. By default, date, name and first comment are shown in date-time order. The attributes that can be displayed are: n name of function or operator, d date of fix yyyy-mm-dd, t time of fix hh:mm:ss, i id of fixer, r number of rows, c number of cols, s size or "workspace footprint" in bytes. ∇ function or operator syntax, which is depicted: ⍴← explicit result. {⍴←} shy result. ⍺ required left argument. {⍺} optional left argument. ⍺⍺ left operand. ⍵ right argument. ⍵⍵ right operand. ∇ function. ∇∇ operator. ⍝ first line comment, In addition, sort characters '⍋' and '∧' are acknowledged: ⍋ use following row as a _visible_ sort field. ∧ use following row as an _invisible_ sort field. · any other character is passed literally to the result column. [attrib] is a good candidate for invocation using a programmable function (PF) key, see →PF_keys←. Technical notes: APL's traditional "name clash" problem is avoided by executing the name refer- encing system functions: ⎕AT, ⎕NR, ⎕SIZE, chronologically _before_ the creation of any of attrib's local names. This means that at system function time, none of the subject names are obscured by local definitions. ··· names lines sntx time ids sizes←↑{ ⍝ names local to attrib. (⊂↓⍵){⍺,⍵ ⍝ names, }(⊂⎕NR¨↓⍵){⍺,⍵ ⍝ ⎕NR, }(1 1 0 1/↓⍉↑,↓⎕AT ⍵){⍺,⍵ ⍝ ⎕AT, }⊂⎕SIZE ⍵ ⍝ ⎕SIZE. }⎕FMT↑⍵ ⍝ executed _before_ local name creation. ··· Notice that a more readable and seemingly equivalent version of the inner four lines above: names←⊂↓⍵ ⍝ fn/op names. lines←⊂⎕NR¨↓⍵ ⍝ ⎕NR, attrs←1 1 0 1/↓⍉↑,↓⎕AT ⍵ ⍝ ⎕AT, sizes←⊂⎕SIZE ⍵ ⍝ ⎕SIZE, names,lines,attrs,sizes ⍝ accumulated attributes. ... would defeat the object by creating "early" local names. For example, local names: [names], [lines] and [attrs], would obscure a workspace function or oper- ator of the same name from the following system functions. An alternative but ungainly coding would be to string the whole thing across a single source line: (⊂↓⍵),(⊂⎕NR¨↓⍵),(1 1 0 1/↓⍉↑,↓⎕AT ⍵),⊂⎕SIZE ⍵ ... but this is over-long and hard to comment or amend. The compromise is to spread it over several lines using the linking function: {⍺,⍵} (···){⍺,⍵ }(···){⍺,⍵ }(···) Incidentally, "workspace footprint" is perhaps a less misleading term for the result of ⎕SIZE. If we imagine the footprints from a number of people on a dusty floor, some of the prints will probably overlap and in extremis, the total area of individual footprints might exceed that of the floor. Similarly, the ⎕SIZE reported for each function or operator includes that of the symbols and literal constants it references. As symbols and constants with identical values are shared (or overlap) between functions and operators, (+/⎕SIZE ⎕NL 3 4) could ex- ceed the value of ⎕WA in an empty workspace! Examples: attrib 'a'⎕nl 3 ⍝ a-functions in date-time order. 2000-10-01 ascfile ⍝ Ascii file as nested vector. 2000-11-09 ambiv ⍝ Ambivalize traditional functions. 2001-11-02 assign ⍝ Hungarian method cost assignment. 2002-10-31 attrib ⍝ Function/operator attributes. names←'attrib' 'wsdiff' 'pow' 'else' ⍝ selection of fns/ops. attrib names ⍝ default fields in fixtime order. 1998-03-05 else ⍝ Condition f else g ... 2000-10-11 pow ⍝ Explicit function power. 2002-10-31 wsdiff ⍝ Workspace differences. 2002-10-31 attrib ⍝ Function/operator attributes. 'n ⍝'attrib names ⍝ names and comments. attrib ⍝ Function/operator attributes. wsdiff ⍝ Workspace differences. pow ⍝ Explicit function power. else ⍝ Condition f else g ... '⍋n ⍝'attrib names ⍝ names and comments in name order. attrib ⍝ Function/operator attributes. else ⍝ Condition f else g ... pow ⍝ Explicit function power. wsdiff ⍝ Workspace differences. 'n i r×c ∇ ⍝'attrib names ⍝ name id rows cols syntax comment. attrib Dyadic 56×82 ⍴←{⍺}∇⍵ ⍝ Function/operator attributes. wsdiff Dyadic 102×82 ⍴←{⍺}∇⍵ ⍝ Workspace differences. pow Dyadic 3×50 ⍴←{⍺}(⍺⍺∇∇)⍵ ⍝ Explicit function power. else Dyadic 4×45 ⍴←{⍺}(⍺⍺∇∇⍵⍵)⍵ ⍝ Condition f else g ... 'dTt s'attrib names ⍝ ISO timestamp and size. 2002-10-31T14:19:22 5340 2002-10-31T10:42:03 8528 2000-10-11T12:14:54 360 1998-03-05T16:41:54 436 'n ⍋s'attrib names ⍝ names in order of WS footprint. pow 360 else 436 attrib 5340 wsdiff 8528 'n ⍋r×⍋c'attrib names ⍝ names in row, then col order. pow 3×50 else 4×45 attrib 56×82 wsdiff 102×82 ⍝ The final examples show the difference in sorting on date or date-time. '⍋d ⍋t n'attrib 2↑names ⍝ date-time order 2002-10-31 10:42:03 wsdiff 2002-10-31 14:19:22 attrib '⍋d n'attrib 2↑names ⍝ date order. 2002-10-31 attrib 2002-10-31 wsdiff '⍋d∧t n'attrib 2↑names ⍝ date-(time) order. 2002-10-31 wsdiff 2002-10-31 attrib See also: PF_keys Back to: contents Back to: Workspaces