Ошибка схемы: «Синтаксическое ключевое слово нельзя использовать как выражение: если» - PullRequest
1 голос
/ 21 ноября 2010

Я новичок в схеме и пытаюсь сделать небольшую очень прямолинейную программу.Но я продолжаю получать это сообщение об ошибке «Синтаксическое ключевое слово не может использоваться в качестве выражения: если».

Может кто-нибудь сказать мне, если я что-то упустил в моей программе или я делаю какую-то ошибку?

Вот моя программа.

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

2 голосов
/ 21 ноября 2010

Я не уверен, что вы пытаетесь сделать, но кажется, что если это не нужно:

(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 голосов
/ 21 ноября 2010

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. Если вы выполняете это интерактивно в терминале, Scheme оценит результат вашей функции и распечатает его для вас.


* небольшое упрощение. Подробнее смотрите в TSPL4 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...