схема - равная функция со списками - PullRequest
0 голосов
/ 17 апреля 2011

Я написал эту программу:

(define find-combination
  {lambda (a b)
    (if (eq? ((quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b)))))
         (display "1*v1" + ((quotient (car a) (car b))*"v2"))
         (display "0*v1" + "0*v2"))})

(find-combination (list 2 2) (list 2 1))

a и b - два списка.Это дает мне следующую проблему: процедура применения: ожидаемая процедура, учитывая: 1;аргументы были: 2.

Я не понял, в чем проблема.Кто-то может мне помочь?Спасибо.

Ответы [ 3 ]

0 голосов
/ 17 апреля 2011

Прежде всего у вас есть набор фигурных скобок в коде (тот, что до лямбды)

Кроме того, у вас есть другой набор парантезов о параметрах, которые вы передали в eq? Это должно быть примерно так:

(eq? (quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b))))
0 голосов
/ 17 апреля 2011

В Схемах и Ракетках круглые скобки меняют значение вещей.

1

- это число, но

(1)

- это вызов на 1 какфункция ... но 1 - это число, а не функция, поэтому это вызовет описанную вами ошибку.

Ваше использование фигурных скобок также немного тревожит меня.

0 голосов
/ 17 апреля 2011

Прежде всего у вас слишком много скобок после eq? - то, что вы написали, означает оценку (quotient (car a) (car b)) и обработку его как функции с аргументом (quotient (car (cdr a)) (car (cdr b))).Ошибка означает, что первое значение было оценено как 1, и ваш интерпретатор ожидал, что это будет процедура, а не целое число.Эта строка должна быть:

(if (eq? (quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b))))

или даже:

(if (eq? (quotient (car a) (car b)) (quotient (cadr a) (cadr b)))

Кроме того, строки с вызовами display неверны - схема не имеет инфиксной записи, поэтому + и * не на своем месте.

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