Hi Curtis

The purpose of (file) and the given examples makes only really sense in a specific context, which indeed is not further explained there.
Additionally, for understanding this it's important to know that:

During execution of (load), the loaded file is the current input stream.

Meant is the "read" step of the picolisp interpreter (the R in REPL), when the source code is turned into the binary picolisp representation within memory (pointers and cells). So during execution of (load "somepath/somefile.l") the code (car (file)) returns "somepath". For this the (car (file)) has to be placed within somefile.l on top level (code that gets executed directly during the load, not e.g. as part of a function definition unless it is called as `read macro).

This way the loaded file can get loaded using a indirect path, and the loaded file can still find out how it got loaded (via which path) and so re-use that path to load another file directly in the same directory as in (load (pack (car (file)) "localFile.l")) or the path information can be stored in a global variable as in (setq *Nanomsg (pack (car (file)) "lib/libnanomsg.so")).

When only (load)ing files from the same directory (no subdirectories), it has indeed no effect. But when this is used in a file meant to be further included in other projects which do not necessarily (load) it using always the same path, this construct allows that the included file still can do further loading with paths relative to the files own location and the including project has not to care about path/directory structure for additional indirectly loaded files.

The alternative would be to use (chdir "somepath/" (load "somefile.l")) in the including project so that during execution of (load "somefile.l") the current directory is guaranteed to be the local directory of "somefile.l".

Best regards,
beneroth


Am 2018-10-17 20:59, schrieb Curtis:
What I mean to say is, it looks as though, from where "file" is being
called, it would always return NIL.
On Wed, Oct 17, 2018 at 1:19 PM Curtis <[email protected]> wrote:

I'm a little confused by the purpose of the (file) function's use in
the example given here: https://software-lab.de/doc/refF.html#file
The example is: (load (pack (car (file)) "localFile.l"))  # Load a
file in same directory

But, doesn't (load "localFile.l") do the same thing?

I noticed the same combination of pack, car, file here:
https://github.com/aw/picolisp-nanomsg/blob/master/EXPLAIN.md
(setq *Nanomsg (pack (car (file)) "lib/libnanomsg.so"))

Isn't it the same thing as just (setq *Nanomsg "lib/libnanomsg.so"))?

--
UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe

Reply via email to