2010-11-21 28 views
1

Şemada yeniyim ve çok basit bir ileri düz program yapmaya çalışıyorum. Ancak bu hata iletisini almaya devam ediyorum "Syntactic anahtar sözcüğü bir ifade olarak kullanılmayabilir: eğer".Şema hatası: "Sözdizimsel anahtar kelime bir ifade olarak kullanılmayabilir:"

Programımda bir şey eksik olup olmadığını veya bir tür hata yapıp yapmadığımı söyleyen var mı?

İşte programım.

(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) 

Teşekkür

-Gunnlaugur

cevap

2

Ne yapmaya çalışıyorsunuz ne olduğundan emin değilim, ama orada gerekli değilse gibi görünüyor:

(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 ifadeler alır formda *

(condition expr1 expr2 ... result) 

Eğer

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

Şema if doğru olup olmadığını görmek için deneyin ve ardından sonraki dört ifadeleri (< (car lis) k), (display (car lis)), else ve (display (cdr lis)) çalışacak verdi beri. Yine de birkaç problemle karşılaşıyor. Sözdizimi olduğundan, if doğru veya yanlış olarak değerlendirilemez. Olsa bile, bir misplaced aux keyword else hatası alırsınız. bu olmadı varsa, o hem(display (car lis)) ve (display (cdr lis)) (istediğini olmadığı. Ben aslında display kullanmak istemediğiniz tahmin ediyorum

. Eğer çalıştırıyorsanız bu yapacağını etkileşimli bir terminalde, Şema senin fonksiyonun sonucunu değerlendirecek ve sizin için baskı.


* hafif sadeleştirme. Ayrıntılar için TSPL4 bak.

İlgili konular