login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Scheme

Offline Fenrir - 03/12/2005 23:14 (laatste wijziging 03/12/2005 23:16)
Avatar van FenrirPHP expert Hoi Sitemasters,

Ik probeer Scheme te leren. Scheme is een programmeertaal die niet veel lijkt op PHP, of andere C-based talen.

VB:

(display "hoi")

vs:

print("hoi")

En:

(if (< 10 15)
(display "10 is kleiner dan 15")
(display "10 is groter dan of gelijk aan 15"))

vs:

if(10 < 15)
{
print("10 kleiner dan 15");
}else
{
print("10 is groter dan of gelijk aan 15");
}

Zo'n programma's zien er vreemd uit in Scheme, maar dat komt omdat het in Scheme altijd zo gaat:

(functienaam parameter1 parameter2 ... parameterN)

En alles in Scheme gaat met functies, dus < en if zijn functies in Scheme. Je zou dus ook je eigen for en switch kunnen maken.
Dit lijkt me wel interessant omdat je dus zelf allerlei dingen aan de taal kunt toevoegen.

Maar het probleem is dat ik het niet begrijp 

http://www.ccs....Z-H-1.html

Dat heb ik even snel doorgelezen, en ik snap het meeste, maar bij "macros" snap ik het niet meer... De eerste dingen snap ik nog wel, maar 8.3 fluid-let snap ik echt niet.

  1. (define-macro fluid-let
  2. (lambda (xexe . body)
  3. (let ((xx (map car xexe))
  4. (ee (map cadr xexe))
  5. (old-xx (map (lambda (ig) (gensym)) xexe))
  6. (result (gensym)))
  7. `(let ,(map (lambda (old-x x) `(,old-x ,x))
  8. old-xx xx)
  9. ,@(map (lambda (x e)
  10. `(set! ,x ,e))
  11. xx ee)
  12. (let ((,result (begin ,@body)))
  13. ,@(map (lambda (x old-x)
  14. `(set! ,x ,old-x))
  15. xx old-xx)
  16. ,result)))))


:o

Kan iemand die in Scheme kan programmeren me dit uitleggen? Volgens mij proberen ze een functie (macro) te maken om een eigen variabele scope te maken, zo ongeveer in php:

  1. $a = 5;
  2. // hier is $a 5
  3. fluid_let(
  4. $a = 10;
  5. // hier is $a 10
  6. );
  7. //hier is $a weer 5


Maar ik snap de code die dit mogelijk maakt niet.

Alvast bedankt voor de hulp,

Jules

0 antwoorden

Gesponsorde links
Er zijn nog geen reacties op dit bericht.
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.205s