[SOLVED] LNAME  exctracting variables from stringed expression?

01162017, 09:34 AM
(This post was last modified: 01162017 12:38 PM by chromos.)
Post: #1




[SOLVED] LNAME  exctracting variables from stringed expression?
Hi,
I have stringed valid expression in list, for example L1(1):="(CA)". How can I extract variables C and A from it with LNAME? Thank you in advance. Prime, 15C CE 

01162017, 11:41 AM
(This post was last modified: 01162017 11:42 AM by DrD.)
Post: #2




RE: LNAME  exctracting variables from stringed expression?
I can share this, and hopefully, it's helpful for you and others ...
(You can copy each command line up to the semi, and paste into the command entry for testing): 1. Example: b:="X+Y<4"; // We know X,Y are reserved vars, so: LNAME(CAS("CAS(b)")); // ==> {}; 2. Convert to lower case variables, one way to avoid reserved vars: b:=LOWER(b); // X+Y<4 ==> x+y<4 LNAME(CAS("CAS(b)")); // ==> {x,y} LNAME(CAS("right(CAS(b)")); // ==> {x,y} I won't mention the CAS left/right thing. 3. Extending the example to your case: b:="(XY)"; ==> similar to your expression, using X and Y b:=LOWER(b); ==> non reserved variables LNAME(CAS("CAS(b)")); // ==> {x,y} LNAME(CAS("left(CAS(b)")); // ==> {x} I won't mention the CAS left/right thing. b:= "(CA)"; ==> Precisely your provided expression b:=LOWER(b); ==> To get nonreserved variables LNAME(CAS("CAS(b)")); // ==> {} // Check to see if there was any preexisting content in variables c or a: // I previously used a and c, so let's change to different variables: "(GF)" b:= "(GF)"; ==> Modeling your provided expression b:=LOWER(b); ==> To get nonreserved variables LNAME(CAS("CAS(b)")); // ==> {g,f} Summary: 1. LNAME is shown in the [Toolbox] and command entry, as a Home command, and shown in the [Help] as a CAS command. 2. LNAME requires nonreserved variables, (symbolics only). 3. Possibly one way to get nonreserved variables is to shift them to lower case equivalents. They must not preexist, only symbolic. 4. An LNAME acceptable string argument can get "evaluated" in the CAS system using the CAS command. 5. Be careful when using the CAS to obtain left or right expressions from a statement. The opinions expressed, may not be your own. Dale 

01162017, 12:23 PM
Post: #3




RE: LNAME  exctracting variables from stringed expression?
You can also do:
Code: LNAME(EXPR("'"+L1(1)+"'")) In your case, with L1(1):="(CA)", it will return {C,A} If you have to use it several times it may be interesting to create a small function such as: Code: EXPORT STR2EXPR(str) and just do: LNAME(STR2EXPR(L1(1))) 

01162017, 12:38 PM
Post: #4




RE: LNAME  exctracting variables from stringed expression?
Thank you Dale for your indepth explanation and examples, but I think if I must convert variables to lower letters then I can simply use CAS.lname("x+y").
Didier, thank you very much, your code is exactly what I was trying to find! Prime, 15C CE 

01162017, 02:46 PM
Post: #5




RE: [SOLVED] LNAME  exctracting variables from stringed expression?
(01162017 11:41 AM)DrD Wrote: Summary: #1: I wonder if this is incomplete documentation. There are two commands: lname and LNAME that do similar things. In Home view, you need to provide an unevaluated expression to LNAME. #2: LNAME can return any type of variable: nonreserved, reserved, even app names and local names from within programs. #3: Preexisting variables are fine. Use a quoted expression to force nonevaluation. LNAME('X+Y') will return { X, Y } in the Home screen. Typing in LNAME('X+Y') vs lname('X+Y') in the CAS view will net different results (probably due to differences in how each view passes parameters to the other view; or it could simply be a bug). Generally speaking, use uppercase in Home view and lowercase in CAS view for command names. #4: Not "can" but "will"  this is a guaranteed behavior. I am unaware of any instance in which this is not the case, but I have been wrong on many occasions (and quite possibly more often than not when it comes to the CAS). The CAS() command takes as its argument the content of the string and always evaluates the content. Evaluating CAS("x+2*y3") is the same as literally typing x+2*y3 in the command line while in CAS view (and the command line necessarily evaluates what was entered). To get an unevaluated expression, quote the content: CAS(" 'x+2*y3' "). Quoted expressions are still evaluated  effectively, their quotes are stripped. Graph 3D  QPI  SolveSys 

01162017, 03:05 PM
(This post was last modified: 01162017 03:35 PM by DrD.)
Post: #6




RE: [SOLVED] LNAME  exctracting variables from stringed expression?
I mentioned the LOWER("Expression") idea, hopefully, to be useful to all who might benefit from such things as cut and paste, from on line activities.
For example, an objective function, with several related constraint inequalities, were part of some problems I have been working with recently. I was able to quickly paste them, as found, into a prime program using that technique. In my program it was necessary to use the LNAME command, (and several other CAS commands), to eventually accomplish the desired result. It often happens that when information is requested in this forum, it might already exist from previous posts. The 'trick' is how to quickly search for it. Assuming my contributions are at all useful, there may be some future value in sharing details. I have found that sometimes a specific answer doesn't quite reveal enough information to resolve the real underlying problem, and often the help resources don't provide quite enough. I have found this forum to be quite a valuable resource, thanks to the very knowledgeable people here! 

01162017, 03:33 PM
Post: #7




RE: [SOLVED] LNAME  exctracting variables from stringed expression?
Prime can be confusing. If Han writes a book on the subject, I'm going to try to buy it!
Here's a few variations on the theme: [CAS] LNAME('X+y'); // ==> [X y] (vector) lname('X+y'); // ==> Shows up as LNAME and returns {y} (list) [Home] LNAME('X+y'); // ==> Syntax error (we know why). lname('X+y'); // ==> same deal. LNAME("'X+y'"); // ==> {} blank as my mind. lname("'X+y'"); // ==> same deal CAS("lname('X+y');"); ==> [139,y] (previously X=139 here) CAS("LNAME('X+y');"); ==>{y} b:="X+y"; LNAME(CAS("CAS(b)")); // ==> {y}, the reserved variable X is not present. b:=LOWER(b); LNAME(CAS("CAS(b)")); // ==> {x,y}, life is good. What I learn from this is that there is much to be learned. 

« Next Oldest  Next Newest »

User(s) browsing this thread: