From: Yves S. G. <you...@gm...> - 2012-04-27 17:48:45
|
Hi, just curious. I ran the little hello world function that you've described with and without the (values)) at the end. Without, I got a NIL returned. With the (values)), I did not have that NIL returned. I would like to know why this is happening? I'm guessing that all functions in Lisp return something, even if it's a null (you have "void" in C/C++ and Java). So, without the (values)), the function by default returns the null. However, with the (values)), we are returning that variable, which is not bound to anything, which is just a blank if it's not bound to nothing. Am I correct? If not, please feel free to explain. On Wed, Apr 25, 2012 at 7:24 PM, Pascal J. Bourguignon < pj...@in...> wrote: > "Yves S. Garret" <you...@gm...> writes: > > > 1. Are there any differences between CLISP and Clozure? If so, how > > substantial are they? Which one would be a good place to start > > for someone new? > > Both are good implementation to start with. > > > > 2. Say I have a file hello_world.lisp. In that file I have the > > function print. How do I execute that function from the command > > line? $ clisp hello_world:print ? > > Depends on what's in this file exactly. > > While the underline character seems to be more "portable" than the dash > for file names (eg. it's advised to use the following regexp for > maximally portable file names: /[A-Z0-9_]{1,8}\.[A-Z0-9_]{1,3}/), as a > lisper I prefer to use a dash in file names instead of an underline. > It's in the lisp style, and it's easier to type: just a key instead of > shift combination. > > So, let's assume a file named hello-world.lisp, containing: > > ----(hello-world.lisp)-------------------------------------------------- > (defun hw () > (format t "~%Bonjour le monde !~%") > (values)) > ------------------------------------------------------------------------ > > then you can run it from the unix command line with: > > $ clisp -norc -ansi -q -x '(progn (load "/tmp/hello-world.lisp" > :verbose nil) (values))' -x '(hw)' > > Bonjour le monde ! > $ > > > But one wonders why you would want to do that? I mean, call a lisp > function from the unix shell? > > > > Either you are implementing a unix script in clisp, in which case you > should name your file hw, and edit it to contain: > > ----(hw)---------------------------------------------------------------- > #!/usr/bin/clisp -q -ansi -norc > > (defun hw () > (format t "~%Bonjour le monde !~%") > (values)) > > (hw) > ------------------------------------------------------------------------ > > $ chmod 755 hw > $ ./hw > > Bonjour le monde ! > $ > > > or you are just writing lisp programs, and then you boot the lisp > environment and stay in it to work: > > $ clisp > i i i i i i i ooooo o ooooooo ooooo ooooo > I I I I I I I 8 8 8 8 8 o 8 8 > I \ `+' / I 8 8 8 8 8 8 > \ `-+-' / 8 8 8 ooooo 8oooo > `-__|__-' 8 8 8 8 8 > | 8 o 8 8 o 8 8 > ------+------ ooooo 8oooooo ooo8ooo ooooo 8 > > Welcome to GNU CLISP 2.49+ (2010-07-17) <http://clisp.org/> > > Copyright (c) Bruno Haible, Michael Stoll 1992, 1993 > Copyright (c) Bruno Haible, Marcus Daniels 1994-1997 > Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998 > Copyright (c) Bruno Haible, Sam Steingold 1999-2000 > Copyright (c) Sam Steingold, Bruno Haible 2001-2010 > > Type :h and hit Enter for context help. > > ;; Loading file /home/pjb/.clisprc.lisp ... > […] > ;; Loaded file /home/pjb/.clisprc.lisp > C/USER[1]> (load "/tmp/hello-world.lisp") > ;; Loading file /tmp/hello-world.lisp ... > ;; Loaded file /tmp/hello-world.lisp > #P"/tmp/hello-world.lisp" > C/USER[2]> (hw) > > Bonjour le monde ! > > C/USER[3]> > > > > -- > __Pascal Bourguignon__ http://www.informatimago.com/ > A bad day in () is better than a good day in {}. > |