I have the following macro: (define-syntax define-facts (syntax-rules () ((_ (name a0 a1 ...) ((v00 v01 ...) (v10 v11 ...) ...)) '(define (name a0 a1 ...) (conde ((== a0 v00) (== a1 v01) ...) ((== a0 v10) (== a1 v11) ...) ...)))))
In Guild 2.0.9 it works as expected: scheme@(guile-user)> (define-facts (fathero f c) (("Abraham" "Ismael") ("Abraham" "Isaac") ("Isaac" "Jacob") ("Jacob" "Benjamin"))) $1 = (define (fathero f c) (conde ((== f "Abraham") (== c "Ismael")) ((== f "Abraham") (== c "Isaac")) ((== f "Isaac") (== c "Jacob")) ((== f "Jacob") (== c "Benjamin")))) But in Chicken csi get the following error: CHICKEN (c) 2008-2013, The Chicken Team (c) 2000-2007, Felix L. Winkelmann Version 4.8.0.5 (stability/4.8.0) (rev 5bd53ac) linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ] compiled 2013-10-03 on aeryn.xorinia.dim (Darwin) #;1> (define-syntax define-facts (syntax-rules () ((_ (name a0 a1 ...) ((v00 v01 ...) (v10 v11 ...) ...)) '(define (name a0 a1 ...) (conde ((== a0 v00) (== a1 v01) ...) ((== a0 v10) (== a1 v11) ...) ...))))) #;2> (define-facts (fathero f c) (("Abraham" "Ismael") ("Abraham" "Isaac") ("Isaac" "Jacob") ("Jacob" "Benjamin"))) Error: (map) during expansion of (define-facts ...) - lists are not of same length: (() (("Jacob") ("Benjamin"))) Call history: <eval> (##sys#map-n (lambda8 (a1 v01) (##sys#cons (rename14 (##core#syntax ==)) (##sys#cons a1 (##sys#cons v01... <eval> (##sys#cons (rename14 (##core#syntax ==)) (##sys#cons a1 (##sys#cons v01 (quote13 ())))) <eval> (rename14 (##core#syntax ==)) <eval> (##sys#cons a1 (##sys#cons v01 (quote13 ()))) <eval> (##sys#cons v01 (quote13 ())) <eval> (##sys#map-n (lambda8 (v10 a1 v11) (##sys#cons (##sys#cons (rename14 (##core#syntax ==)) (##sys#cons...... <eval> (##sys#cons (##sys#cons (rename14 (##core#syntax ==)) (##sys#cons a0 (##sys#cons v10 (quote13 ()))))... <eval> (##sys#cons (rename14 (##core#syntax ==)) (##sys#cons a0 (##sys#cons v10 (quote13 ())))) <eval> (rename14 (##core#syntax ==)) <eval> (##sys#cons a0 (##sys#cons v10 (quote13 ()))) <eval> (##sys#cons v10 (quote13 ())) <eval> (##sys#map-n (lambda8 (v11) (##sys#cons (rename14 (##core#syntax ==)) (##sys#cons a1 (##sys#cons v11... <eval> (##sys#cons (rename14 (##core#syntax ==)) (##sys#cons a1 (##sys#cons v11 (quote13 ())))) <eval> (rename14 (##core#syntax ==)) <eval> (##sys#cons a1 (##sys#cons v11 (quote13 ()))) <eval> (##sys#cons v11 (quote13 ())) <-- I am not sure if it is a bug, because Chibi and Gambit fail, too. But Petite Chez does it like Guile. Is it a bug? _______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-users