|
|
1.1 root 1: .NH 1
2: Editing Functions
3: .PP
4: Function editing on
5: \*u \*a
6: differs from that on other
7: \*a systems.
8: The ``del'' character is not used.
9: Instead,
10: the \*u editor
11: is used.
12: There are two alternatives.
13: .PP
14: The ``)editf'' system command is
15: used to edit a function residing
16: in the internal workspace.
17: The command
18: .sp
19: )editf fn
20: .sp
21: writes the function ``fn'' into
22: a temporary file and calls
23: the editor to process it.
24: When the editor is finished,
25: \*a reads it back in.
26: .PP
27: The command:
28: .sp
29: )edit junk
30: .sp
31: invokes the editor to process
32: the \*u file ``junk''.
33: When the editor is terminated
34: via the ``q'' command,
35: control returns to \*a,
36: which will read ``junk'' into
37: the internal workspace.
38: Note that
39: this method involves files
40: external to \*a.
41: ``)editf'' is generally a better choice
42: since it allows all information relating
43: to the workspace to be contained
44: within the workspace.
45: .PP
46: Because of the way in which editing
47: is performed,
48: there are two points which need
49: special attention.
50: First,
51: it is not possible to edit a suspended
52: function.
53: (For a description of suspended functions
54: and how to reset them,
55: see ``The State Indicator''.)
56: Second,
57: if the function header
58: (first line of the function)
59: contains a syntax error,
60: \*a will
61: .I not
62: read in the function.
63: In general,
64: this means that the function
65: is no longer defined in the
66: workspace,
67: and the only other copy
68: exists in a temporary file.
69: In order to save you a lot
70: of work retyping,
71: \*a will
72: automatically copy the temporary
73: file into a file called
74: ``apl.badfn''
75: .PP
76: An example is probably called for at
77: this point
78: to clear the mud somewhat.
79: The following shows the creation
80: of the function ``fact''
81: which computes factorials
82: by multiplication.
83: .DS
84: )editf fact
85: [new fn]
86: XED
87: 0 lines
88: >a
89: [ 0 ] n { fact+i
90: [ 1 ] n { 1
91: [ 2 ] loop: } (i = 0) / 0
92: [ 3 ] n { n X i
93: [ 4 ] i { i - 1
94: [ 5 ] } loop
95: [ 6 ] .
96: >w
97: >q
98: n { fact+i
99: ^
100: syntax error
101: Function saved in apl.badfn
102: .DE
103: The error in line 0
104: (``fact+i'')
105: caused \*a to stop reading
106: the function,
107: so it was automatically copied
108: to the file ``apl.badfn''.
109: To get it back,
110: you can say:
111: .DS
112: )editf fact
113: [new fn]
114: XED
115: 0 lines
116: >r apl.badfn
117: 5 lines
118: >0s/+/ /p
119: [ 0 ] n { fact i
120: >w
121: >q
122: .DE
123: .PP
124: If you use ``)edit'' instead of ``)editf'',
125: \*a will not worry about saving
126: the function in ``apl.badfn''
127: because you were editing from a
128: \*u file rather than
129: the internal workspace,
130: and that file still exists.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.