dolist on main-args problem

Q&A's, tips, howto's

dolist on main-args problem

Postby dukester » Wed Aug 23, 2017 9:18 pm

I have this test code:
Code: Select all
#!c:\bin\newlisp\newlisp.exe
(println (main-args 2))   ;; works OK

(dolist (x (main-args))
(println $idx ":" x))
(exit)


The above code works fine! BUT - when I ask dolist to use a "break expression", I'm making it choke and I don't know why!

So if I do:
Code: Select all
(dolist (x (main-args 2))


No joy!! Help!! and I have read the manual!! TIA ....

BTW, this is happening on a Win10 box
duke
dukester
 
Posts: 90
Joined: Tue May 08, 2007 1:06 pm
Location: Alberta, Canada

Re: dolist on main-args problem

Postby ralph.ronnquist » Wed Aug 23, 2017 10:51 pm

Maybe you confuse it with the following?
Code: Select all
(dolist (x (2 (main-args)))
ralph.ronnquist
 
Posts: 178
Joined: Mon Jun 02, 2014 1:40 am
Location: Melbourne, Australia

Re: dolist on main-args problem

Postby dukester » Thu Aug 24, 2017 1:17 am

Thanks for the reply Ron!

The manual says:
dolist
syntax: (dolist (sym list|array [exp-break]) body)

(dolist (x '(a b c d e f g) (= x 'e)) ; prints: abcd
(print x))


The optional "exp break" appeared to follow all the other arguments!

How am I interpreting the manual incorrectly?
duke
dukester
 
Posts: 90
Joined: Tue May 08, 2007 1:06 pm
Location: Alberta, Canada

Re: dolist on main-args problem

Postby ralph.ronnquist » Thu Aug 24, 2017 4:00 am

One could read it like this: that the first element of a dolist is a list with three elements:
- firstly a symbol,
- then a list or array,
- then, optionally, a "break expression".

Especially, that break expression is a third element of the list, and not an argument to the list construction expression. (count the parentheses)

Further it tells me, that the middle element, i.e., the list or array, is actually an expression that is evaluated once initially, to provide the actual sequence of values to assign to the symbol, i.e. the first element of the list. And it tells me, that the third element, i.e. the break expression, is a term that is evaluated and re-evaluated subsequent to each assignment, to determine whether or not to break, i.e. exit out of the dolist expression.
ralph.ronnquist
 
Posts: 178
Joined: Mon Jun 02, 2014 1:40 am
Location: Melbourne, Australia

Re: dolist on main-args problem

Postby dukester » Thu Aug 24, 2017 4:28 am

So how does this reconcile with the code snippet

Code: Select all
(dolist (x (2 (main-args)))


that you kindly volunteered in your previous post - which works like a charm?
duke
dukester
 
Posts: 90
Joined: Tue May 08, 2007 1:06 pm
Location: Alberta, Canada

Re: dolist on main-args problem

Postby ralph.ronnquist » Thu Aug 24, 2017 6:33 am

Well, that's a repetition over the command line arguments, starting with the third. Specifically:

+ when invoked without arguments, the main-args function returns the command line arguments as a list of strings. When invoked with an argument, an integer, then it returns only that command line argument as a string (with 0 indicating the first argument).

+ the term syntax (2 list) returns the sub list of the given list starting with the third element (i.e., skip 2). That's the sequence of values provided successively to x in the dolist clause.

There is no "break expression" involved. A break expression is something that stops the succession of assignments (and the further execution of the dolist clause). It's not a way to pick which values to repeat for (that's done by the "list|array" element), or to skip individual assignments; it basically is just a way to end the repetition prematurely.
ralph.ronnquist
 
Posts: 178
Joined: Mon Jun 02, 2014 1:40 am
Location: Melbourne, Australia

Re: dolist on main-args problem

Postby dukester » Thu Aug 24, 2017 11:50 am

Thx Ralph!! Much obliged ...

I now see how I confused the "break expression" with "sub list" expression!

Learning any flavour of LISP as been such a challenge for me! But at my age, the struggle might be an excellent way to keep the "leetle grey cells" flashing and sparking! LOL
duke
dukester
 
Posts: 90
Joined: Tue May 08, 2007 1:06 pm
Location: Alberta, Canada


Return to newLISP in the real world

Who is online

Users browsing this forum: No registered users and 2 guests