|
|
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.