3

次のコードは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>

これを修正するにはどうすればよいですか?実際のコードはhttp://www.wescheme.org/view?publicId=gutsy-buddy-woken-smoke-wrestで入手できます。

(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 (define (silly1 p)
            (define (silly2 n) (insert p n (car l)))
            (map silly2 (seq 0 (length p))))
            (apply append (map silly1 (permute (cdr l))))]))
4

2 に答える 2

4

もう 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)))

上記は、私が考えることができるほぼすべてのScheme実装で機能します。これは非常に基本的な標準のSchemeコードです。

于 2012-06-10T15:52:15.527 に答える
3

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))
于 2012-06-10T12:59:45.027 に答える