Guile and Scheme links

From AbInitio

(Difference between revisions)
Jump to: navigation, search
Revision as of 04:37, 2 June 2010 (edit)
Stevenj (Talk | contribs)
(Guile:)
← Previous diff
Revision as of 21:10, 9 September 2016 (edit)
Ardavan (Talk | contribs)
(Scheme:)
Next diff →
Line 8: Line 8:
* A [[w:Scheme programming language|history and introduction to Scheme]], with links to more sites, at the [http://en.wikipedia.org/ Wikipedia] collaborative encyclopedia. * A [[w:Scheme programming language|history and introduction to Scheme]], with links to more sites, at the [http://en.wikipedia.org/ Wikipedia] collaborative encyclopedia.
* [http://www.swiss.ai.mit.edu/ftpdir/scheme-reports/r5rs-html/r5rs_toc.html R5RS] is the official Scheme language definition and reference. * [http://www.swiss.ai.mit.edu/ftpdir/scheme-reports/r5rs-html/r5rs_toc.html R5RS] is the official Scheme language definition and reference.
-* A classic [http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/scheme/doc/intro/intro.txt introduction] to Scheme by Ken Dickey. +* A classic [ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/intro.txt introduction] to Scheme by Ken Dickey.
* [http://mitpress.mit.edu/sicp/sicp.html Structure and Interpretation of Computer Programs] by Abelson, Sussman, and Sussman (full text online). * [http://mitpress.mit.edu/sicp/sicp.html Structure and Interpretation of Computer Programs] by Abelson, Sussman, and Sussman (full text online).
-* [http://www.cs.utexas.edu/users/wilson/schintro/schintro_toc.html Introduction to Scheme and its Implementation] (the complete book on-line) by [http://www.cs.utexas.edu/users/wilson/ Prof. Paul R. Wilson] ([http://www.cs.utexas.edu/ Univ. of Texas]). +* [ftp://ftp.cs.utexas.edu/pub/garbage/cs345/schintro-v14/schintro_toc.html Introduction to Scheme and its Implementation] (the complete book on-line) by [http://www.cs.utexas.edu/users/wilson/ Prof. Paul R. Wilson] ([http://www.cs.utexas.edu/ Univ. of Texas]).
-* [http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html Teach Yourself Scheme] is a nice tutorial-style introduction to Scheme programming.+* [http://ds26gte.github.io/tyscheme/index.html Teach Yourself Scheme] is a nice tutorial-style introduction to Scheme programming.
* The [http://www.swiss.ai.mit.edu/projects/scheme/index.html MIT Scheme Home Page] (where do you think Scheme was invented?) * The [http://www.swiss.ai.mit.edu/projects/scheme/index.html MIT Scheme Home Page] (where do you think Scheme was invented?)
** also check out the MIT [http://www.ai.mit.edu/projects/su/su.html Scheme Underground] ** also check out the MIT [http://www.ai.mit.edu/projects/su/su.html Scheme Underground]

Revision as of 21:10, 9 September 2016

libctl
Manual: Introduction
Basic User Experience
Advanced User Experience
User Reference
Developer Experience
Guile and Scheme links
License and Copyright

There are many places you can go to on the Web to find out more regarding Guile and the Scheme programming language. We list a few of them here:

Contents

Scheme:

Scheme is a simplified derivative of Lisp, and is a small and beautiful dynamically typed, lexically scoped, functional language.

Guile:

Guile is a free implementation of Scheme, designed to be plugged in to other programs as a scripting language.

  • The home site for the GNU Guile project.
  • The GLUG (Guile Lovers Use Guile) Guile user's site.
  • See parts IV and V of the Guile Reference Manual for additional Scheme functions and types defined within the Guile environment.

How to write a loop in Scheme

The most frequently asked question seems to be: how do I write a loop in Scheme? We give a few answers to that here, supposing that we want to vary a parameter x from a to b in steps of dx, and do something for each value of x.

The classic way, in Scheme, is to write a tail-recursive function:

(define (doit x x-max dx)
   (if (<= x x-max)
      (begin
         ...perform loop body with x...
         (doit (+ x dx) x-max dx))))

(doit a b dx) ; execute loop from a to b in steps of dx

There is also a do-loop construct in Scheme that you can use

(do ((x a (+ x dx))) ((> x b)) ...perform loop body with x...)

If you have a list of values of x that you want to loop over, then you can use map:

(map (lambda (x) ...do stuff with x...) list-of-x-values)

Tricks specific to libctl-using programs (such as MPB or Meep)

libctl has a couple of built-in functions arith-sequence and interpolate (see the user reference) to construct lists of a regular sequence of values, which you can use in conjunction with map as above:

(map (lambda (x) ...do stuff with x...)
     (arith-sequence x-min dx num-x))

or

(map (lambda (x) ...do stuff with x...)
     (interpolate num-x (list a b)))

Finally, if you have an entire libctl input file myfile.ctl that you want to loop, varying over some parameter x, you can do so by writing a loop on the Unix command-line. Using the bash shell, you could do:

for x in `seq a dx b`; do program x=$x myfile.ctl; done
Personal tools