Вызов функции со схемой - PullRequest
       15

Вызов функции со схемой

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

Я пытаюсь запустить следующий код:

(define (myadd x y)
    (+ x y)
)

(myadd '(3 4))

Но я получаю следующую ошибку:

Error: +: number required, but got (3 4) [myadd, +]

Как мне получить функцию myadd, возвращающую 7?

Ответы [ 2 ]

4 голосов
/ 17 апреля 2020

Вот как вы должны вызывать вашу процедуру:

(myadd 3 4) ; option 1

Поскольку она ожидает двух параметров x и y, которые связаны с 3 и 4 в примере. Это не сработает:

(myadd '(3 4))

Выше передается аргумент single - список с двумя элементами. Не только число аргументов неверно, но и тип, так как процедура ожидает два числа.

Теперь, если два значения, которые вы хотите передать процедуре myadd, приходят как список откуда-то еще у вас есть две возможности передать их, либо явно извлечь их:

(define args '(3 4))
(myadd (car args) (cadr args))  ; option 2

, либо использовать apply, чтобы вызвать вашу процедуру со списком:

(apply myadd '(3 4))  ; option 3

Любой из трех параметров, описанных выше, вернет значение 7, но я держу пари, что вам просто интересен самый простой вариант - вариант №1.

3 голосов
/ 17 апреля 2020

Используйте функцию apply, чтобы разбить список на отдельные аргументы:

(apply myadd '(3 4))
...