Hello, `case' as currently implemented in Guile does not conform to R5RS, because it allows an `else'-clause in any position in the clause list. R5RS (section 4.2.1) states: [...] The last <clause> may be an ``else clause'', which has the form [...] Guile allows the following code, which evaluates to 'consonant (define a 'w) (case a ((a e i o u) 'vowel) (else 'consonant) ((y w) 'semi-vowel)) The correct version would be: (case a ((a e i o u) 'vowel) ((y w) 'semi-vowel) (else 'consonant)) The patch attached below rejects the first `case' statement and allows only the second one. If you think this bug report is too picky, please tell me and ignore this post. Thx, 'mgrabmue -- Martin Grabmueller [EMAIL PROTECTED] http://www.pintus.de/mgrabmue/ mgrabmue@#lkcc on EFnet ===File ~/cvs/guile-core/diff=============================== Index: libguile/eval.c =================================================================== RCS file: /cvs/guile/guile-core/libguile/eval.c,v retrieving revision 1.188 diff -c -r1.188 eval.c *** libguile/eval.c 2000/12/28 16:49:09 1.188 --- libguile/eval.c 2001/01/17 14:57:06 *************** *** 595,601 **** proc = SCM_CAR (x); SCM_ASSYNT (scm_ilength (proc) >= 2, xorig, scm_s_clauses, s_case); SCM_ASSYNT (scm_ilength (SCM_CAR (proc)) >= 0 ! || SCM_EQ_P (scm_sym_else, SCM_CAR (proc)), xorig, scm_s_clauses, s_case); } return scm_cons (SCM_IM_CASE, cdrx); --- 595,602 ---- proc = SCM_CAR (x); SCM_ASSYNT (scm_ilength (proc) >= 2, xorig, scm_s_clauses, s_case); SCM_ASSYNT (scm_ilength (SCM_CAR (proc)) >= 0 ! || (SCM_EQ_P (scm_sym_else, SCM_CAR (proc)) ! && SCM_NULLP (SCM_CDR (x))), xorig, scm_s_clauses, s_case); } return scm_cons (SCM_IM_CASE, cdrx); ============================================================ _______________________________________________ Bug-guile mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-guile
