b2676870@soph.cs.ubc.ca (wilson w ma) (04/21/91)
Hello. I've got two questions about RPL. How is one suppose to delete elments from a list? I.e., if I've a list of say 10 items and want to delete the 5th item, how do I do it? I've RTFM over and over and can't find any command that does this. You can use + to add to a list but there is no such command for removing. I've cooked up the following but is this optimal? \<< \-> l n \<< l OBJ\-> m \<< IF n 1 \>= n m \<= AND THEN m n - 1 + ROLL DROP m 1 - \->LIST ELSE m \->LIST END \>> \>> \>> My second question is about converting strings from mixed case to uppercase only. I've written the following but it's too slow. Is there anyway to speed it up? (Would it be too much to ask of any one of the ML hotshots to redo this? ;) I've tried to replace the IF DUP THEN sequence with an IFERR but that was slower. \<< DUP SIZE 1 SWAP FOR i DUP i DUP SUB "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" ROT POS IF DUP THEN DUP SUB i SWAP REPL ELSE DROP2 END NEXT \>> Any suggestions on the above would be appreciated. George
rouben@math16.math.umbc.edu (Rouben Rostamian) (04/21/91)
In article <1991Apr20.222545.12776@soph.cs.ubc.ca> b2676870@soph.cs.ubc.ca (wilson w ma) writes: >How is one suppose to delete elments from a list? I.e., if I've a list of >say 10 items and want to delete the 5th item, how do I do it? ...[Program deleted] Here is a shorter program to remove a given element from a list. \<< DUP2 1 SWAP 1 - SUB 3 ROLLD 1 + OVER SIZE SUB + \>> Example: 2: { 1 2 3 4 5 6 } 1: 2 Efter evaluating the program you will have: 1: { 1 3 4 5 6 } Hope that this helps. Regarding your other qustion on converting mixed strings to uppercase, have you tried using NUM? Although I have not tried, I would think that it would be rather easy to write a program using NUM for this purpose. -- Rouben Rostamian Telephone: (301) 455-2458 Department of Mathematics and Statistics e-mail: University of Maryland Baltimore County bitnet: rostamian@umbc.bitnet Baltimore, MD 21228, U.S.A. internet: rouben@math9.math.umbc.edu
sburke@jarthur.Claremont.EDU (Scott Burke) (04/22/91)
And here's a stack-based approach to removing an object from a list, which executes about 25% faster than the one using SUB: Input: 2: list 1: index \<< SWAP OBJ\-> DUP DUP 3 + ROLL - 2 + ROLL DROP 1 - \->LIST \>> If you're looking for something more elegant, however, you're out of luck-- there is no specific command to do what you want. Scott. sburke@jarthur.claremont.edu
@vms3.macc.wisc.edu:KAUFMAN@ETHL.DecNet (KAUFMAN) (04/22/91)
On 20 Apr 91 22:25:45 GMT b2676870@soph.cs.ubc.ca (wilson w ma) writes: >My second question is about converting strings from mixed case to uppercase >only. I've written the following but it's too slow. Is there anyway to speed [program deleted] How about this? STRUP [4E04] << DUP SIZE 1 SWAP FOR i DUP i DUP SUB NUM DUP DUP 96 > SWAP 123 < AND IF THEN 32 - CHR SWAP DUP 1 i 1 - SUB SWAP DUP SIZE i 1 + SWAP SUB 3 ROLLD SWAP + SWAP + ELSE DROP END NEXT >> This of course was written on an HP28S and typed in manually. I do not think there are any typos (famous last words). On my 28S it goes at approximately .1 s/char with a string of all lowercase (.05 s/char with all uppercase). I don't know if this is fast or slow, you be the judge. Have fun! TheSeeker DAK ______________________ / . _____ . \ ____________________________________________________ . |<__|/ . | | Internet: dkaufman@vms.macc.wisc.edu | . | |/ . | | Bitnet: dkaufman@wiscmacc | . ---/- . | \ SnailMail: 1820 Summit Avenue Madison, WI 53705 | . __/__ . | \--\ 'Two shift keys? That's stupid.' | . |/_>| . | \ HP /--\ 28S /--\ IS /--\ THE /-\ KEY /------ . /| | . | \__/ \___/ \__/ \___/ \___/ | . /-----. . | \______________________/
bson@wheat-chex.ai.mit.edu (Jan Brittenson) (04/22/91)
In a posting of [22 Apr 91 02:49:00 GMT] @vms3.macc.wisc.edu:KAUFMAN@ETHL.DecNet (KAUFMAN) writes: > How about this? > STRUP [4E04] > << DUP SIZE 1 SWAP > FOR i DUP i DUP > SUB NUM DUP DUP 96 > > SWAP 123 < AND > IF > THEN 32 - CHR > SWAP DUP 1 i 1 - SUB > SWAP DUP SIZE i 1 + > SWAP SUB 3 ROLLD > SWAP + SWAP + > ELSE DROP > END > NEXT > >> Doesn't work for the entire ISO 8859-1 character set, unfortunately. The best thing would probably be to use a 256-character translation table. Fortunately, converting HP-48 characters to uppercase is identical to converting ISO 8859-1 to uppercase. Here is such a translation table, used by the STAR assembler, in C. (Notice the German double-S exception, it translates to itself.) It should be trivial to write an Emacs macro (or what tools are being used) to transform this into an HP-48 string, or STAR assembler. (The table version probably *will* run faster than explicitly checking for all odds and ends of ISO 8859-1. It will probably use more memory, though.) /* ISO 8859-1 uppercase conversion table */ unsigned char upper_table[0400] = { '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107', '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117', '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127', '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137', '\140', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\173', '\174', '\175', '\176', '\177', '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\367', '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\377' }; -- Jan Brittenson bson@ai.mit.edu