scheme-using.texi 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. @c -*-texinfo-*-
  2. @c This is part of the GNU Guile Reference Manual.
  3. @c Copyright (C) 2006, 2010, 2011
  4. @c Free Software Foundation, Inc.
  5. @c See the file guile.texi for copying conditions.
  6. @node Using Guile Interactively
  7. @section Using Guile Interactively
  8. When you start up Guile by typing just @code{guile}, without a
  9. @code{-c} argument or the name of a script to execute, you get an
  10. interactive interpreter where you can enter Scheme expressions, and
  11. Guile will evaluate them and print the results for you. Here are some
  12. simple examples.
  13. @lisp
  14. scheme@@(guile-user)> (+ 3 4 5)
  15. $1 = 12
  16. scheme@@(guile-user)> (display "Hello world!\n")
  17. Hello world!
  18. scheme@@(guile-user)> (values 'a 'b)
  19. $2 = a
  20. $3 = b
  21. @end lisp
  22. @noindent
  23. This mode of use is called a @dfn{REPL}, which is short for
  24. ``Read-Eval-Print Loop'', because the Guile interpreter first reads the
  25. expression that you have typed, then evaluates it, and then prints the
  26. result.
  27. The prompt shows you what language and module you are in. In this case, the
  28. current language is @code{scheme}, and the current module is
  29. @code{(guile-user)}. @xref{Other Languages}, for more information on Guile's
  30. support for languages other than Scheme.
  31. @menu
  32. * Init File::
  33. * Readline::
  34. * Value History::
  35. * REPL Commands::
  36. * Error Handling::
  37. * Interactive Debugging::
  38. @end menu
  39. @node Init File
  40. @subsection The Init File, @file{~/.guile}
  41. @cindex .guile
  42. When run interactively, Guile will load a local initialization file from
  43. @file{~/.guile}. This file should contain Scheme expressions for
  44. evaluation.
  45. This facility lets the user customize their interactive Guile
  46. environment, pulling in extra modules or parameterizing the REPL
  47. implementation.
  48. To run Guile without loading the init file, use the @code{-q}
  49. command-line option.
  50. @node Readline
  51. @subsection Readline
  52. To make it easier for you to repeat and vary previously entered
  53. expressions, or to edit the expression that you're typing in, Guile
  54. can use the GNU Readline library. This is not enabled by default
  55. because of licensing reasons, but all you need to activate Readline is
  56. the following pair of lines.
  57. @lisp
  58. scheme@@(guile-user)> (use-modules (ice-9 readline))
  59. scheme@@(guile-user)> (activate-readline)
  60. @end lisp
  61. It's a good idea to put these two lines (without the
  62. @code{scheme@@(guile-user)>} prompts) in your @file{.guile} file.
  63. @xref{Init File}, for more on @file{.guile}.
  64. @node Value History
  65. @subsection Value History
  66. Just as Readline helps you to reuse a previous input line, @dfn{value
  67. history} allows you to use the @emph{result} of a previous evaluation in
  68. a new expression. When value history is enabled, each evaluation result
  69. is automatically assigned to the next in the sequence of variables
  70. @code{$1}, @code{$2}, @dots{}. You can then use these variables in
  71. subsequent expressions.
  72. @lisp
  73. scheme@@(guile-user)> (iota 10)
  74. $1 = (0 1 2 3 4 5 6 7 8 9)
  75. scheme@@(guile-user)> (apply * (cdr $1))
  76. $2 = 362880
  77. scheme@@(guile-user)> (sqrt $2)
  78. $3 = 602.3952191045344
  79. scheme@@(guile-user)> (cons $2 $1)
  80. $4 = (362880 0 1 2 3 4 5 6 7 8 9)
  81. @end lisp
  82. Value history is enabled by default, because Guile's REPL imports the
  83. @code{(ice-9 history)} module. Value history may be turned off or on within the
  84. repl, using the options interface:
  85. @lisp
  86. scheme@@(guile-user)> ,option value-history #f
  87. scheme@@(guile-user)> 'foo
  88. foo
  89. scheme@@(guile-user)> ,option value-history #t
  90. scheme@@(guile-user)> 'bar
  91. $5 = bar
  92. @end lisp
  93. Note that previously recorded values are still accessible, even if value history
  94. is off. In rare cases, these references to past computations can cause Guile to
  95. use too much memory. One may clear these values, possibly enabling garbage
  96. collection, via the @code{clear-value-history!} procedure, described below.
  97. The programmatic interface to value history is in a module:
  98. @lisp
  99. (use-modules (ice-9 history))
  100. @end lisp
  101. @deffn {Scheme Procedure} value-history-enabled?
  102. Return true iff value history is enabled.
  103. @end deffn
  104. @deffn {Scheme Procedure} enable-value-history!
  105. Turn on value history, if it was off.
  106. @end deffn
  107. @deffn {Scheme Procedure} disable-value-history!
  108. Turn off value history, if it was on.
  109. @end deffn
  110. @deffn {Scheme Procedure} clear-value-history!
  111. Clear the value history. If the stored values are not captured by some other
  112. data structure or closure, they may then be reclaimed by the garbage collector.
  113. @end deffn
  114. @node REPL Commands
  115. @subsection REPL Commands
  116. @cindex commands
  117. The REPL exists to read expressions, evaluate them, and then print their
  118. results. But sometimes one wants to tell the REPL to evaluate an
  119. expression in a different way, or to do something else altogether. A
  120. user can affect the way the REPL works with a @dfn{REPL command}.
  121. The previous section had an example of a command, in the form of
  122. @code{,option}.
  123. @lisp
  124. scheme@@(guile-user)> ,option value-history #t
  125. @end lisp
  126. @noindent
  127. Commands are distinguished from expressions by their initial comma
  128. (@samp{,}). Since a comma cannot begin an expression in most languages,
  129. it is an effective indicator to the REPL that the following text forms a
  130. command, not an expression.
  131. REPL commands are convenient because they are always there. Even if the
  132. current module doesn't have a binding for @code{pretty-print}, one can
  133. always @code{,pretty-print}.
  134. The following sections document the various commands, grouped together
  135. by functionality. Many of the commands have abbreviations; see the
  136. online help (@code{,help}) for more information.
  137. @menu
  138. * Help Commands::
  139. * Module Commands::
  140. * Language Commands::
  141. * Compile Commands::
  142. * Profile Commands::
  143. * Debug Commands::
  144. * Inspect Commands::
  145. * System Commands::
  146. @end menu
  147. @node Help Commands
  148. @subsubsection Help Commands
  149. When Guile starts interactively, it notifies the user that help can be
  150. had by typing @samp{,help}. Indeed, @code{help} is a command, and a
  151. particularly useful one, as it allows the user to discover the rest of
  152. the commands.
  153. @deffn {REPL Command} help [@code{all} | group | @code{[-c]} command]
  154. Show help.
  155. With one argument, tries to look up the argument as a group name, giving
  156. help on that group if successful. Otherwise tries to look up the
  157. argument as a command, giving help on the command.
  158. If there is a command whose name is also a group name, use the @samp{-c
  159. @var{command}} form to give help on the command instead of the group.
  160. Without any argument, a list of help commands and command groups
  161. are displayed.
  162. @end deffn
  163. @deffn {REPL Command} show [topic]
  164. Gives information about Guile.
  165. With one argument, tries to show a particular piece of information;
  166. currently supported topics are `warranty' (or `w'), `copying' (or `c'),
  167. and `version' (or `v').
  168. Without any argument, a list of topics is displayed.
  169. @end deffn
  170. @deffn {REPL Command} apropos regexp
  171. Find bindings/modules/packages.
  172. @end deffn
  173. @deffn {REPL Command} describe obj
  174. Show description/documentation.
  175. @end deffn
  176. @node Module Commands
  177. @subsubsection Module Commands
  178. @deffn {REPL Command} module [module]
  179. Change modules / Show current module.
  180. @end deffn
  181. @deffn {REPL Command} import [module ...]
  182. Import modules / List those imported.
  183. @end deffn
  184. @deffn {REPL Command} load file
  185. Load a file in the current module.
  186. @end deffn
  187. @deffn {REPL Command} reload [module]
  188. Reload the given module, or the current module if none was given.
  189. @end deffn
  190. @deffn {REPL Command} binding
  191. List current bindings.
  192. @end deffn
  193. @deffn {REPL Command} in module expression
  194. @deffnx {REPL Command} in module command [args ...]
  195. Evaluate an expression, or alternatively, execute another meta-command
  196. in the context of a module. For example, @samp{,in (foo bar) ,binding}
  197. will show the bindings in the module @code{(foo bar)}.
  198. @end deffn
  199. @node Language Commands
  200. @subsubsection Language Commands
  201. @deffn {REPL Command} language language
  202. Change languages.
  203. @end deffn
  204. @node Compile Commands
  205. @subsubsection Compile Commands
  206. @deffn {REPL Command} compile exp
  207. Generate compiled code.
  208. @end deffn
  209. @deffn {REPL Command} compile-file file
  210. Compile a file.
  211. @end deffn
  212. @deffn {REPL Command} disassemble exp
  213. Disassemble a compiled procedure.
  214. @end deffn
  215. @deffn {REPL Command} disassemble-file file
  216. Disassemble a file.
  217. @end deffn
  218. @node Profile Commands
  219. @subsubsection Profile Commands
  220. @deffn {REPL Command} time exp
  221. Time execution.
  222. @end deffn
  223. @deffn {REPL Command} profile exp
  224. Profile execution.
  225. @end deffn
  226. @deffn {REPL Command} trace exp
  227. Trace execution.
  228. @end deffn
  229. @node Debug Commands
  230. @subsubsection Debug Commands
  231. These debugging commands are only available within a recursive REPL;
  232. they do not work at the top level.
  233. @deffn {REPL Command} backtrace [count] [#:width w] [#:full? f]
  234. Print a backtrace.
  235. Print a backtrace of all stack frames, or innermost @var{COUNT} frames.
  236. If @var{count} is negative, the last @var{count} frames will be shown.
  237. @end deffn
  238. @deffn {REPL Command} up [count]
  239. Select a calling stack frame.
  240. Select and print stack frames that called this one.
  241. An argument says how many frames up to go.
  242. @end deffn
  243. @deffn {REPL Command} down [count]
  244. Select a called stack frame.
  245. Select and print stack frames called by this one.
  246. An argument says how many frames down to go.
  247. @end deffn
  248. @deffn {REPL Command} frame [idx]
  249. Show a frame.
  250. Show the selected frame. With an argument, select a frame by index,
  251. then show it.
  252. @end deffn
  253. @deffn {REPL Command} procedure
  254. Print the procedure for the selected frame.
  255. @end deffn
  256. @deffn {REPL Command} locals
  257. Show local variables.
  258. Show locally-bound variables in the selected frame.
  259. @end deffn
  260. @deffn {REPL Command} error-message
  261. @deffnx {REPL Command} error
  262. Show error message.
  263. Display the message associated with the error that started the current
  264. debugging REPL.
  265. @end deffn
  266. @deffn {REPL Command} registers
  267. Show the VM registers associated with the current frame.
  268. @xref{Stack Layout}, for more information on VM stack frames.
  269. @end deffn
  270. @deffn {REPL Command} width [cols]
  271. Sets the number of display columns in the output of @code{,backtrace}
  272. and @code{,locals} to @var{cols}. If @var{cols} is not given, the width
  273. of the terminal is used.
  274. @end deffn
  275. The next 3 commands work at any REPL.
  276. @deffn {REPL Command} break proc
  277. Set a breakpoint at @var{proc}.
  278. @end deffn
  279. @deffn {REPL Command} break-at-source file line
  280. Set a breakpoint at the given source location.
  281. @end deffn
  282. @deffn {REPL Command} tracepoint proc
  283. Set a tracepoint on the given procedure. This will cause all calls to
  284. the procedure to print out a tracing message. @xref{Tracing Traps}, for
  285. more information.
  286. @end deffn
  287. The rest of the commands in this subsection all apply only when the
  288. stack is @dfn{continuable} --- in other words when it makes sense for
  289. the program that the stack comes from to continue running. Usually this
  290. means that the program stopped because of a trap or a breakpoint.
  291. @deffn {REPL Command} step
  292. Tell the debugged program to step to the next source location.
  293. @end deffn
  294. @deffn {REPL Command} next
  295. Tell the debugged program to step to the next source location in the
  296. same frame. (See @ref{Traps} for the details of how this works.)
  297. @end deffn
  298. @deffn {REPL Command} finish
  299. Tell the program being debugged to continue running until the completion
  300. of the current stack frame, and at that time to print the result and
  301. reenter the REPL.
  302. @end deffn
  303. @node Inspect Commands
  304. @subsubsection Inspect Commands
  305. @deffn {REPL Command} inspect EXP
  306. Inspect the result(s) of evaluating @var{exp}.
  307. @end deffn
  308. @deffn {REPL Command} pretty-print EXP
  309. Pretty-print the result(s) of evaluating @var{exp}.
  310. @end deffn
  311. @node System Commands
  312. @subsubsection System Commands
  313. @deffn {REPL Command} gc
  314. Garbage collection.
  315. @end deffn
  316. @deffn {REPL Command} statistics
  317. Display statistics.
  318. @end deffn
  319. @deffn {REPL Command} option [key value]
  320. List/show/set options.
  321. @end deffn
  322. @deffn {REPL Command} quit
  323. Quit this session.
  324. @end deffn
  325. Current REPL options include:
  326. @table @code
  327. @item compile-options
  328. The options used when compiling expressions entered at the REPL.
  329. @xref{Compilation}, for more on compilation options.
  330. @item interp
  331. Whether to interpret or compile expressions given at the REPL, if such a
  332. choice is available. Off by default (indicating compilation).
  333. @item prompt
  334. A customized REPL prompt. @code{#f} by default, indicating the default
  335. prompt.
  336. @item value-history
  337. Whether value history is on or not. @xref{Value History}.
  338. @item on-error
  339. What to do when an error happens. By default, @code{debug}, meaning to
  340. enter the debugger. Other values include @code{backtrace}, to show a
  341. backtrace without entering the debugger, or @code{report}, to simply
  342. show a short error printout.
  343. @end table
  344. Default values for REPL options may be set using
  345. @code{repl-default-option-set!} from @code{(system repl common)}:
  346. @deffn {Scheme Procedure} repl-set-default-option! key value
  347. Set the default value of a REPL option. This function is particularly
  348. useful in a user's init file. @xref{Init File}.
  349. @end deffn
  350. @node Error Handling
  351. @subsection Error Handling
  352. When code being evaluated from the REPL hits an error, Guile enters a
  353. new prompt, allowing you to inspect the context of the error.
  354. @lisp
  355. scheme@@(guile-user)> (map string-append '("a" "b") '("c" #\d))
  356. ERROR: In procedure string-append:
  357. ERROR: Wrong type (expecting string): #\d
  358. Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
  359. scheme@@(guile-user) [1]>
  360. @end lisp
  361. The new prompt runs inside the old one, in the dynamic context of the
  362. error. It is a recursive REPL, augmented with a reified representation
  363. of the stack, ready for debugging.
  364. @code{,backtrace} (abbreviated @code{,bt}) displays the Scheme call
  365. stack at the point where the error occurred:
  366. @lisp
  367. scheme@@(guile-user) [1]> ,bt
  368. 1 (map #<procedure string-append _> ("a" "b") ("c" #\d))
  369. 0 (string-append "b" #\d)
  370. @end lisp
  371. In the above example, the backtrace doesn't have much source
  372. information, as @code{map} and @code{string-append} are both
  373. primitives. But in the general case, the space on the left of the
  374. backtrace indicates the line and column in which a given procedure calls
  375. another.
  376. You can exit a recursive REPL in the same way that you exit any REPL:
  377. via @samp{(quit)}, @samp{,quit} (abbreviated @samp{,q}), or
  378. @kbd{C-d}, among other options.
  379. @node Interactive Debugging
  380. @subsection Interactive Debugging
  381. A recursive debugging REPL exposes a number of other meta-commands that
  382. inspect the state of the computation at the time of the error. These
  383. commands allow you to
  384. @itemize @bullet
  385. @item
  386. display the Scheme call stack at the point where the error occurred;
  387. @item
  388. move up and down the call stack, to see in detail the expression being
  389. evaluated, or the procedure being applied, in each @dfn{frame}; and
  390. @item
  391. examine the values of variables and expressions in the context of each
  392. frame.
  393. @end itemize
  394. @noindent
  395. @xref{Debug Commands}, for documentation of the individual
  396. commands. This section aims to give more of a walkthrough of a typical
  397. debugging session.
  398. First, we're going to need a good error. Let's try to macroexpand the
  399. expression @code{(unquote foo)}, outside of a @code{quasiquote} form,
  400. and see how the macroexpander reports this error.
  401. @lisp
  402. scheme@@(guile-user)> (macroexpand '(unquote foo))
  403. ERROR: In procedure macroexpand:
  404. ERROR: unquote: expression not valid outside of quasiquote in (unquote foo)
  405. Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
  406. scheme@@(guile-user) [1]>
  407. @end lisp
  408. The @code{backtrace} command, which can also be invoked as @code{bt},
  409. displays the call stack (aka backtrace) at the point where the debugger
  410. was entered:
  411. @lisp
  412. scheme@@(guile-user) [1]> ,bt
  413. In ice-9/psyntax.scm:
  414. 1130:21 3 (chi-top (unquote foo) () ((top)) e (eval) (hygiene #))
  415. 1071:30 2 (syntax-type (unquote foo) () ((top)) #f #f (# #) #f)
  416. 1368:28 1 (chi-macro #<procedure de9360 at ice-9/psyntax.scm...> ...)
  417. In unknown file:
  418. 0 (scm-error syntax-error macroexpand "~a: ~a in ~a" # #f)
  419. @end lisp
  420. A call stack consists of a sequence of stack @dfn{frames}, with each
  421. frame describing one procedure which is waiting to do something with the
  422. values returned by another. Here we see that there are four frames on
  423. the stack.
  424. Note that @code{macroexpand} is not on the stack -- it must have made a
  425. tail call to @code{chi-top}, as indeed we would find if we searched
  426. @code{ice-9/psyntax.scm} for its definition.
  427. When you enter the debugger, the innermost frame is selected, which
  428. means that the commands for getting information about the ``current''
  429. frame, or for evaluating expressions in the context of the current
  430. frame, will do so by default with respect to the innermost frame. To
  431. select a different frame, so that these operations will apply to it
  432. instead, use the @code{up}, @code{down} and @code{frame} commands like
  433. this:
  434. @lisp
  435. scheme@@(guile-user) [1]> ,up
  436. In ice-9/psyntax.scm:
  437. 1368:28 1 (chi-macro #<procedure de9360 at ice-9/psyntax.scm...> ...)
  438. scheme@@(guile-user) [1]> ,frame 3
  439. In ice-9/psyntax.scm:
  440. 1130:21 3 (chi-top (unquote foo) () ((top)) e (eval) (hygiene #))
  441. scheme@@(guile-user) [1]> ,down
  442. In ice-9/psyntax.scm:
  443. 1071:30 2 (syntax-type (unquote foo) () ((top)) #f #f (# #) #f)
  444. @end lisp
  445. Perhaps we're interested in what's going on in frame 2, so we take a
  446. look at its local variables:
  447. @lisp
  448. scheme@@(guile-user) [1]> ,locals
  449. Local variables:
  450. $1 = e = (unquote foo)
  451. $2 = r = ()
  452. $3 = w = ((top))
  453. $4 = s = #f
  454. $5 = rib = #f
  455. $6 = mod = (hygiene guile-user)
  456. $7 = for-car? = #f
  457. $8 = first = unquote
  458. $9 = ftype = macro
  459. $10 = fval = #<procedure de9360 at ice-9/psyntax.scm:2817:2 (x)>
  460. $11 = fe = unquote
  461. $12 = fw = ((top))
  462. $13 = fs = #f
  463. $14 = fmod = (hygiene guile-user)
  464. @end lisp
  465. All of the values are accessible by their value-history names
  466. (@code{$@var{n}}):
  467. @lisp
  468. scheme@@(guile-user) [1]> $10
  469. $15 = #<procedure de9360 at ice-9/psyntax.scm:2817:2 (x)>
  470. @end lisp
  471. We can even invoke the procedure at the REPL directly:
  472. @lisp
  473. scheme@@(guile-user) [1]> ($10 'not-going-to-work)
  474. ERROR: In procedure macroexpand:
  475. ERROR: source expression failed to match any pattern in not-going-to-work
  476. Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
  477. @end lisp
  478. Well at this point we've caused an error within an error. Let's just
  479. quit back to the top level:
  480. @lisp
  481. scheme@@(guile-user) [2]> ,q
  482. scheme@@(guile-user) [1]> ,q
  483. scheme@@(guile-user)>
  484. @end lisp
  485. Finally, as a word to the wise: hackers close their REPL prompts with
  486. @kbd{C-d}.
  487. @node Using Guile in Emacs
  488. @section Using Guile in Emacs
  489. @cindex Emacs
  490. Any text editor can edit Scheme, but some are better than others. Emacs
  491. is the best, of course, and not just because it is a fine text editor.
  492. Emacs has good support for Scheme out of the box, with sensible
  493. indentation rules, parenthesis-matching, syntax highlighting, and even a
  494. set of keybindings for structural editing, allowing navigation,
  495. cut-and-paste, and transposition operations that work on balanced
  496. S-expressions.
  497. As good as it is, though, two things will vastly improve your experience
  498. with Emacs and Guile.
  499. @cindex Paredit
  500. The first is Taylor Campbell's
  501. @uref{http://www.emacswiki.org/emacs/ParEdit, Paredit}. You should not
  502. code in any dialect of Lisp without Paredit. (They say that
  503. unopinionated writing is boring---hence this tone---but it's the
  504. truth, regardless.) Paredit is the bee's knees.
  505. @cindex Geiser
  506. The second is
  507. @iftex
  508. Jos@'e
  509. @end iftex
  510. @ifnottex
  511. José
  512. @end ifnottex
  513. Antonio Ortega Ruiz's
  514. @uref{http://www.nongnu.org/geiser/, Geiser}. Geiser complements Emacs'
  515. @code{scheme-mode} with tight integration to running Guile processes via
  516. a @code{comint-mode} REPL buffer.
  517. Of course there are keybindings to switch to the REPL, and a good REPL
  518. environment, but Geiser goes beyond that, providing:
  519. @itemize @bullet
  520. @item
  521. Form evaluation in the context of the current file's module.
  522. @item
  523. Macro expansion.
  524. @item
  525. File/module loading and/or compilation.
  526. @item
  527. Namespace-aware identifier completion (including local bindings, names
  528. visible in the current module, and module names).
  529. @item
  530. Autodoc: the echo area shows information about the signature of the
  531. procedure/macro around point automatically.
  532. @item
  533. Jump to definition of identifier at point.
  534. @item
  535. Access to documentation (including docstrings when the implementation
  536. provides it).
  537. @item
  538. Listings of identifiers exported by a given module.
  539. @item
  540. Listings of callers/callees of procedures.
  541. @item
  542. Rudimentary support for debugging and error navigation.
  543. @item
  544. Support for multiple, simultaneous REPLs.
  545. @end itemize
  546. See Geiser's web page at @uref{http://www.nongnu.org/geiser/}, for more
  547. information.
  548. @c Local Variables:
  549. @c TeX-master: "guile.texi"
  550. @c End: