2010-11-21 7 views
1

私はスキームを使い始めました。私は非常に単純なプログラムをやってみようとしています。 しかし、私はこのエラーメッセージ "Syntacticキーワードは式として使用することはできません:if"を取得し続けます。スキームエラー: "構文キーワードが式として使用されない場合があります:"

私のプログラムに何か不足している場合や、私が何らかの間違いをしていると誰にでも教えていただけますか?

ここは私のプログラムです。

(define (foo lis k) 
(COND 
    ((NULL? lis) '()) 
    (IF (< (CAR lis) k) 
    (display (CAR lis)) 
    ELSE (display (CDR lis))) 
)) 
(foo '(1 5 3 2 4) 3) 

おかげ

-Gunnlaugur

答えて

2

私はあなたがやろうとしているかわからないんだけど、そこに必要とされていない場合のようにそれはそう:

(define (foo lis k) 
    (cond 
    ((null? lis) '()) 
    ((< (car lis) k) 
     (display (car lis))) 
    (else (display (cdr lis))))) 
(foo '(1 5 3 2 4) 3) 
0

condが式を取ります*

(condition expr1 expr2 ... result) 

あなたは

(if (< (car lis) k) (display (car lis)) else (display (cdr lis))) 

スキームがifが真であるかどうかを確認しようとし、次の4つの式(< (car lis) k)(display (car lis))else、および(display (cdr lis))を実行します与えたので。しかし、それにはいくつかの問題があります。 ifは構文なので、trueまたはfalseとして評価することはできません。可能であれば、misplaced aux keyword elseというエラーが発生します。それが実現しなかった場合と、それはあなたが望むものではないとする((display (car lis))(display (cdr lis))の両方を行うだろう。

を私はあなたが実際にdisplayを使用しないことを推測している。あなたがこれを実行している場合対話的ターミナルでは、Schemeはあなたの関数の結果を評価し、あなたのためにそれを印刷してください。


*若干簡素化。詳細についてはTSPL4で探してください。

関連する問題