6

http://www.archlinux.org/packages/extra/x86_64/drscheme/から drscheme を使用してい ます。

教科書のサンプル コードを使用しようとしていますが、「バインドされていない識別子」エラーが発生し続けます。スキームインタープリターが正しく構成されていないためですか?それともコードが単に間違っていますか?

以下にいくつかの例を示します。

入力:

#lang scheme
(define (equalimp lis1 lis2)
        (COND
         ((NULL? lis1) (NULL? lis2))
         ((NULL? lis2) '())
         ((EQ? (CAR lis1) (CAR lis2)) (equalimp (CDR lis1) (CDR lis2)))
         (ELSE '())
))

出力:

DrScheme、バージョン 4.2.5 [3m] へようこそ。言語: スキーム; メモリ制限: 128 MB。

expand: モジュール内のバインドされていない識別子 in: COND

入力:

#lang scheme
(define (quadratic_roots a b c)
  (LET (
        (root_part_over_2a
         (/ (SQRT (- (* b b) (* 4 a c))) (* 2 a)))
        (minus_b_over_2a (/ (- 0 b) (* 2 a)))
       )
  (DISPLAY (+ minus_b_over_2a root_part_over_2a))
  (NEWLINE)
  (DISPLAY (- minus_b_over_2a root_part_over_2a))
  ))

出力:

expand: モジュール内のバインドされていない識別子 in: LET

注: これを読んだので、LET* を使用してみました: stackoverflow.com/questions/946050/using-let-in-scheme ですが、同じエラーが発生します。

ありがとう !

4

1 に答える 1

7

その言語設定では大文字と小文字の区別の問題のようです。スキームは大文字と小文字を区別しないはずですが、試してみると

(define (equalimp lis1 lis2)
        (cond
         ((null lis1) (null? lis2))
         ((null? lis2) '())
         ((eq? (car lis1) (car lis2)) (equalimp (cdr lis1) (cdr lis2)))
         (else '())
))

それはうまくいきました。

于 2010-04-29T01:48:02.903 に答える