Latest Update to MACfns 4.0

This describes the new features of Release 4.0 of MACfns. Minor changes and improvements in documentation or APL analog functions are not listed. See HISTORY for a history of MACfns releases, GROUPS for logical groupings of all MACfns, and PRECIS for an alphabetical listing.

Release 4.0 (17May2008)

The base ∆CPULEVEL for MACfns remains at 2 or 3 (a 486). While some functions remain at level 0 or 1 (and therefore work on a 386), the majority exploit features of, and require, more advanced processors.

This release contains ∆DTBLENS, which is the basis for the results of ∆MATDS, ∆MATNV, ∆MATSS, and ∆RJUST, and replaces NBLENGTH from the 'ASMFNS' workspace. ∆ROWIOTA replaces ROWFIND from the 'ASMFNS' workspace; it works on numeric as well as character matrices, and is about 1.5-2.5 times faster.

New capability L ∆ROWFIND R flags rows of character array L which contain text R anywhere in the row; it is typically 20 times faster than ∨/R⍷L, and is also faster for the special cases of L^.=R and ∨/L=R.

∆DATEBASE and ∆DATEREP replace DATEBASE and DATEREP from the 'DATES' workspace, but have several advantages, including being typically 30 times faster and returning smaller results. ∆DATE2BAS and ∆DATE2REP are variants for small arguments. ∆DATEPACK and ∆DATEUNP facilitate packing, unpacking, and repacking of YYYY MM DD dates to and from integers in a variety of readable formats.

General documentation has been improved with the addition of a GLOSSARY, a summary of INVERSES, the PAPER06 from the 2006 APL User Conference, and additions to ASMFNS.

Here are the new functions:

∆DATEBASE Compute days since 1Jan1900 from YYYY MM DD dates.
∆DATEPACK Pack YYYY MM DD dates as scalars {per L={0-5}}.
∆DATEREP  Compute YYYY MM DD dates from days since 1Jan1900.
∆DATEUNP  Unpack scalars as YYYY MM DD dates {per L={0-5{,cuspyear}}}.
∆DATE2BAS Compute days since 1Jan1900 from two YYYY MM DD dates.
∆DATE2REP Compute YYYY MM DD dates from two days since 1Jan1900.
∆DTBLENS  Length of rows sans trailing blanks:  +/∨\' '≠⌽R
∆ROWFIND  Flag rows of character L containing vector R:  ∨/R⍷1/L
∆ROWIOTA  Locate rows of R in matrix L; ⎕IO-1 if not found ⍝ ⎕CT=0

Many functions have slight speedups, with ∆COERCE, ∆DECH, ∆INCH, ∆NOT, and ∆SIGN being up to 20% faster on fpt arguments.

∆HDIV was fixed to correct a small Boolean inaccuracy, and aCRC1 was fixed to a bug in setting ⎕IO.