2010-11-21 17 views
1

我是新來的方案,我正在嘗試做一個非常簡單的小程序。 但我不斷收到此錯誤消息「語法關鍵字不能用作表達式:if」。方案錯誤:「語法關鍵字不能用作表達式: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是真實的,然後運行接下來的四個表情(< (car lis) k)(display (car lis))else(display (cdr lis))。不過,它遇到了一些問題。 if不能被評估爲真或假,因爲它是語法。即使可能,你也會得到一個misplaced aux keyword else錯誤。如果這沒有發生,它會做(display (car lis))(display (cdr lis))(這是不是你想要的。

我猜,你實際上並不想用display。如果你運行這個在交互終端,計劃將評估你的函數的結果,並打印出來給你。


*略有簡化。看在TSPL4瞭解詳情。

相關問題