On Thu, Jan 15, 2004 at 05:14:24PM +0100, Jan Nieuwenhuizen wrote: > Joost van Baal writes: > > > I am interested in learning guile. Anybody willing to help me get > > started? > > I would not consider it `help', but I can recommend SICP: > > http://mitpress.mit.edu/sicp/ > > You learn basic programming techniques, and get scheme knowledge for > free ;-) Heb dat inmiddels maar aangeschaft: van papier leest t toch wat makkelijker. Geweldig boek inderdaad. Tot nog toe snap ik 1 ding niet. Voor degenen die niet bekend zijn met scheme (of lisp of guile of varianten) zal ik hier proberen een scheme-in-5-minuten te geven, zodat ook zij het probleem misschien kunnen snappen. ----------------------------------------------------------------------- null? tests wether its argument is the empty list nil is the empty list car selects the first item in the list cdr selects the sublist consisting of all but the first item cons vormt een paar van zijn 2 elementen list bouwt lists: (list a1 a2 a3 ... an) is (cons a1 (cons a2 (cons ... (cons an nil) ...))) cond is als een case-statement: (cond (predicate1 expression1) (predicate2 expression2) ... (predicaten expressionn)) (define nil '()) Nu kunnen we het onderstaande wellicht snappen: (define (map proc items) (if (null? items) nil (cons (proc (car items)) (map proc (cdr items))))) [2.2.1 p 105] (define (filter predicate sequence) (cond ((null? sequence) nil) ((predicate (car sequence)) (cons (car sequence) (filter predicate (cdr sequence)))) (else (filter predicate (cdr sequence))))) [2.2.3 p 115] (define (enumerate-interval low high) (if (> low high) nil (cons low (enumarate-interval (+ low 1) high)))) [2.2.3 p 116] (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (accumulate cons nil (list 1 2 3 4 5)) geeft (1 2 3 4 5) (define (even-fibs n) (accumulate cons nil (filter even? (map fib (enumerate-interval 0 n))))) [2.2.3, p 116] (define (flatmap proc seq) (accumulate append nil (map proc seq))) [2.2.3, p 123] ----------------------------------------------------------------------- En nu de vraag: is (define (even-fibs n) (accumulate cons nil (filter even? (map fib (enumerate-interval 0 n))))) hetzelfde als (define (even-fibs n) (filter even? (map fib (enumerate-interval 0 n)))) ? Groeten, Joost
<<inline: signature.asc>>