Using Eval in an Application
----------------------------
To use eval as part of an application, just copy the single (20KB) function into
your workspace.

    )copy eval eval
c:\dyalog90\samples\dfns\eval saved ...

Note  that  if eval can't reduce an expression to a number, it returns the char-
acter vector form of the (possibly reduced) expression:

    eval'2+3'           ⍝ numeric result.
5
    eval'1+2+x+4'       ⍝ character result.
3+x+4

We might want to trap such results as errors:

    rslt←eval expr
    0≠⍬⍴0⍴rslt:'bad expr'⎕signal 11

Environment
-----------
An  environment vector of name-value pairs may be passed to eval as a left argu-
ment:

    ('A1' 6)('B2' 7) eval 'A1 * B2'
42

Errors
------
Syntactically  incorrect  expressions  generate  an error (666) with a "helpful"
message.  The message is preceded by an indented marker to show the exact posit-
ion of the problem:

      until''
    2+3+4++5+6+7
          \ missing operand

In  an  application,  we  might want to separate the marker from the text of the
message.

    emsg _ _←⎕dm            ⍝ split diagnostic message vector.
    drop←2++/^\' '=emsg     ⍝ number of chars to drop from message.
    text←drop↓emsg          ⍝ raw error message text.
    indx←⎕io+drop-2         ⍝ index of error in source char vector.

Back to: →Contents