方案错误:“语法关键字不能用作表达式:if”

时间:2010-11-21 15:53:06

标签: scheme

我是计划的新手,我正在努力做一个非常直接的小计划。 但我不断收到此错误消息“语法关键字可能不会用作表达式: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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

cond采用*

形式的表达式
(condition  expr1 expr2  ... result)

既然你给了

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

Scheme将尝试查看if是否为true,然后运行接下来的四个表达式(< (car lis) k)(display (car lis))else(display (cdr lis))。但是,它遇到了几个问题。 if不能被评估为true或false,因为它是语法。即使可能,也会出现misplaced aux keyword else错误。如果没有发生,它会 {/ em> (display (car lis))(display (cdr lis))(这不是你想要的。

我猜你实际上并不想使用display。如果您在终端中以交互方式运行此程序,Scheme将评估您的功能结果并为您打印。


*略有简化。查看TSPL4了解详情。