Subject: Re: Q: Function to convert 'abc+def = (abc def) From: Erik Naggum <erik@naggum.net> Date: 2000/11/20 Newsgroups: comp.lang.lisp Message-ID: <3183715001067568@naggum.net> * "Sandeep Koranne" <sandeep.koranne@nospam.philips.com> | I want a function that takes input a symbol and returns a list made up | of the two components of the input symbol separated by a character '+'. | We can safely assume that there will be one and only one of these special | characters embedded inside. | Also assume that the character is always there. | | I was hoping that | (defun split-on-plus (insym) | (ler ((ret-list nil) | (sym-name (symbol-name insym))) | (push (string-left-trim "+" sym-name) ret-list) | (push (string-right-trim "+" sym-name) ret-list) | ret-list)) Please make an effort to post both tested and readable code. | I hoped this would do the trick, but I found out that the example | given in CLt:L2 (for string-left-trim) dont work on CLISP and "cmucl". | I tried typing them in and all they were doing was throwing the input | string back at me. I highly doubt that. | E.g. (string-left-trim "abc" "labcabcabc") => "labcabc" | (It should give that according to the book) Really? Why do you believe that? Please note that the _left_ edge of this text is in this direction <---, while the _right_ edge of the text is in that direction --->. You need to read the specification of these functions, too. The first argument is not a _string_, but a _collection_ of characters. E.g,, string-right-trim applied to the same arguments would simply return "l". | So what am I doing wrong ???? You are _guessing_ and you fail to be aware of it. That's a cardinal epistemological _sin_, dude. Repent now. | I had to write 'split-on-plus' using (aref ) on the string. | I am sure there must be a better way of getting at sub-strings. Well, position will find the character for you. (defun silly-function-#398 (symbol) (let* ((symbol-name (symbol-name symbol)) (delimiter (position #\+ symbol-name))) (list (intern (subseq symbol-name 0 delimiter)) (intern (subseq symbol-name (1+ delimiter)))))) Not that this necessarily does what you expect, unless you never change which package is current in your system. #:Erik -- ALGORITHM: a procedure for solving a mathematical problem in a finite number of steps that frequently involves repetition of an operation. ALGOREISM: a procedure for solving an electoral problem in a finite number of steps that frequently involves repetition of an operation.