2013-06-08 6 views
4

Я начинаю изучать Схему и хорошо, я пытаюсь реализовать свою собственную функцию max, которая дает максимум двух параметров.Параметр схемы не применим

Я написал функцию, как это: (define (myMax x y) (cond ((> x y) (x)) ((< x y) (y))))

Но каждый раз, когда я пытаюсь называть это (myMax 100 40) (пример) я получаю ошибку, которая говорит:
The object 100 is not applicable.

Поиск в документации MIT ГНУ -Sheme, они говорят: This type indicates an error in which a program attempted to apply an object that is not a procedure. The object being applied is saved in the datum field, and the arguments being passed to the object are saved as a list in the operands field.
Но что это значит?

Weird вещь, я реализовал очень простую функцию, которая добавляет два числа, и она работает просто отлично, а также функция абсолютного значения, которая отлично работает; может ли это быть условным?

Благодаря

+2

Что должно произойти, когда 'x' равно' y'? Может быть, 'if' является более подходящим. – tom

+0

Вы правы, я попытался игнорировать это, чтобы заставить дело работать. Но почему бы «если» быть более уместным? Я могу просто добавить другое условие; есть ли причина, почему это менее целесообразно? – Fingolfin

+2

У него есть одно условие вместо двух: '(if (> x y) x y)' – tom

ответ

11

В схеме (function-name arguments) синтаксис для применения функции к данным аргументам. Таким образом, (x) означает «применить функцию x к никаким аргументам». Однако x не является функцией, которую компилятор пытается рассказать вам, сказав, что она не «применима».

Поскольку вы действительно не хотите применять x, просто удалите круглые скобки вокруг него. То же самое для (y) в другом случае cond.

+0

Ого! Большое спасибо :) – Fingolfin

+0

emmm вопрос; не x (x) не убедите в x? или я смешиваю данные и функции здесь? – Fingolfin

+3

@AdelQodmani '(x)' оценивает результат вызова 'x' без аргументов, если' x' является функцией и к ошибке в противном случае. – sepp2k

 Смежные вопросы

  • Нет связанных вопросов^_^