This is the mail archive of the guile@cygnus.com mailing list for the guile project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
I can answer some of your questions, but not all. Rob> 2) To do a sort, I used something like: >> (require 'sort) >> (sort! '("hello" "there" "testing" "one") string<?) slib used to be bundled with Guile, but it is not anymore. To use slib you must install slib separately (I install it in $(prefix)/share/guile/site/slib), and then go through the module system, which you can currently do with (use-modules (ice-9 slib)) after which your (sort! '("hello" "there" "testing" "one") string<?) should work (it does for me). Rob> This no longer works and I cannot find *any* sort function Rob> in the guile-1.2 distribution. Is there some other place I Rob> should be going for "extras" like this? Most of them will be in the slib interface. Rob> 3) I am using guile as an embedded language for a C++ program Rob> that has its own notion of "commands". I have a central Rob> dispatch routine for all entry from scheme into my commands. Rob> The previous engineer had done a *lot* of tweaking of Rob> guile-ii to make this work. Rob> [scm_make_subr discussions and all] You could take a look at Jim Blandy's essay on data representation, which will eventually end up in the reference manual. Right now it is in the separate guile-doc package on ftp://ftp.red-bean.com/pub/guile/ in the file sources/data-rep.texi In it you will find some discussion of scm_make_gsubr() and so forth. Jim might also answer you in more detail. Rob> 4) I have some C++ code which writes to a scheme port. I Rob> used to use "gscm_fwrite" which would return the number of Rob> chars written. The only public routine I can find to do the Rob> same thing is "scm_gen_write" which does not return the char Rob> count. Is there some other routine I should use? How about writing your own wrapper which first gets the length, then prints it, and then returns the length? Rob> 5) When in interactive mode, "(let ((x 3)) (write foopy))" Rob> gives: [...] I think this is pretty much the same as your first question. I think Jim or Mikael will get back to you on it. Rob> 6) How do I expand a procedure? In guile-ii I could just Rob> type the procedure name and it would give a (somewhat) Rob> readable representation of the procedure. In guile-1.2, I Rob> just get "#<procedure blah args>". The options interface allows you to do that. Here's an example session in which I dick around with the print options: <3 papageno->rosalia> guile guile> (define (f x) (* x x)) guile> (print-options 'full) source no Print closures with source. closure-hook #f Hook for printing closures. guile> f #<procedure f (x)> guile> (print-enable 'source) (source closure-hook #f) guile> f #<procedure f (x) (* x x)> guile> Rob> 7) As an example, the procedure "debug-enable" doesn't Rob> actually show up in the main symbol table. However, it is Rob> defined. Is this an example of the new module system? Can Rob> someone point me to some docs on how the module system works? I think it's some clever macro stuff Mikael did when he implemented the options interface. Current snapshots of guile-doc have my attempt at documenting the options interface, but I think it will need another pass. Rob> 1) "#f" used to mean empty list (in addition to "()"). That was kind of a silly feature for Scheme, and Jim Blandy and Richard Stallman have come up with a way of keeping Guile's Scheme "pure" while still providing an emacs lisp infrastructure. I forget the details, but Jim might be able to send you his white paper on the subject. Rob> 2) "defined?" used to be a macro so that (defined? goober) Rob> was legit. Now, one must use (defined? 'goober) You might want to keep your eyes open for how the dust will settle on that issue. I remember discussion and I don't remember the result. Rob> 3) "print" routine is gone... have to use (write obj) and Rob> (newline) instead "print" is provided in SLIB's YASOS, but I think it's got stuff you don't want. It requires a port argument, and (use-modules (ice-9 slib)) (require 'yasos) (define (f x) (* x x)) (print f (current-output-port)) is clumsy and gives a funky #t right after the object gets printed. I guess (define (myprint obj) (begin (write obj) (newline))) is what you need. Or you could call it like pascal's writeln :-)