Fix cond ambiguity: check ALL clauses with cond-scheme?, not just first
The cond special form misclassified Clojure-style as scheme-style when the first test was a 2-element list like (nil? x) — treating it as a scheme clause ((test body)) instead of a function call. Define cond-scheme? using every? to check ALL clauses, fix eval.sx sf-cond and render.sx eval-cond, rewrite engine.sx parse-time/filter-params as nested if to avoid the ambiguity, add regression tests across eval/ render/aser specs. 378/378 tests pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -539,6 +539,9 @@ class PyEmitter:
|
||||
clauses = expr[1:]
|
||||
if not clauses:
|
||||
return "NIL"
|
||||
# Check ALL clauses are 2-element lists (scheme-style).
|
||||
# Checking only the first is ambiguous — (nil? x) is a 2-element
|
||||
# function call, not a scheme clause ((test body)).
|
||||
is_scheme = (
|
||||
all(isinstance(c, list) and len(c) == 2 for c in clauses)
|
||||
and not any(isinstance(c, Keyword) for c in clauses)
|
||||
|
||||
Reference in New Issue
Block a user