Wescheme中的方案代码cond错误

Wescheme中的方案代码cond错误,scheme,racket,wescheme,Scheme,Racket,Wescheme,尽管以下代码在DrRacket环境中运行良好,但它在WeScheme中生成以下错误: Inside a cond branch, I expect to see a question and an answer, but I see more than two things here. at: line 15, column 4, in <definitions> 使用local进行教学语言的内部定义 如果你在这里和邮件列表上都发布你的问题, 记得写信给你这样做。如果有人回答这里,

尽管以下代码在DrRacket环境中运行良好,但它在WeScheme中生成以下错误:

Inside a cond branch, I expect to see a question and an answer, but I see more than two things here.
at: line 15, column 4, in <definitions>

使用
local
进行教学语言的内部定义

如果你在这里和邮件列表上都发布你的问题, 记得写信给你这样做。如果有人回答这里,那里 邮件列表上的人没有理由 是时候回答了

(define (insert l n e)
  (if (= 0 n)
      (cons e l)
      (cons (car l) 
            (insert (cdr l) (- n 1) e))))

(define (seq start end)
  (if (= start end)
      (list end)
      (cons start (seq (+ start 1) end))))

(define (permute2 l) 
  (cond 
    [(null? l) '(())]
    [else 
     (local [(define (silly1 p)
               (local [(define (silly2 n) (insert p n (car l)))]
                 (map silly2 (seq 0 (length p)))))]
       (apply append (map silly1 (permute2 (cdr l)))))]))

(permute2 '(3 2 1))

另一种选择是重新构造代码,提取内部定义(这似乎是WeScheme的问题)并传递缺少的参数,如下所示:

(define (insert l n e)
  (if (= 0 n)
      (cons e l)
      (cons (car l) 
            (insert (cdr l) (- n 1) e))))

(define (seq start end)
  (if (= start end)
      (list end)
      (cons start (seq (+ start 1) end))))

(define (permute l) 
  (cond 
    [(null? l) '(())]
    [else (apply append (map (lambda (p) (silly1 p l))
                             (permute (cdr l))))]))

(define (silly1 p l)
  (map (lambda (n) (silly2 n p l))
       (seq 0 (length p))))

(define (silly2 n p l)
  (insert p n (car l)))

以上内容在我所能想到的任何方案实现中都适用,这是非常基本的标准方案代码。

我也交叉引用了这一点。
(define (insert l n e)
  (if (= 0 n)
      (cons e l)
      (cons (car l) 
            (insert (cdr l) (- n 1) e))))

(define (seq start end)
  (if (= start end)
      (list end)
      (cons start (seq (+ start 1) end))))

(define (permute l) 
  (cond 
    [(null? l) '(())]
    [else (apply append (map (lambda (p) (silly1 p l))
                             (permute (cdr l))))]))

(define (silly1 p l)
  (map (lambda (n) (silly2 n p l))
       (seq 0 (length p))))

(define (silly2 n p l)
  (insert p n (car l)))