Как вернуть значение из функции в схеме - PullRequest
0 голосов
/ 18 апреля 2020

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

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

(define (mymul x y)
    (* x y)
    (display (* x y))
)

(apply myadd '(3 (apply mymul '(3 4)))

Я пытаюсь получить ответ 12 при запуске (apply myadd '(3 (apply mymul '(3 4))), но вместо этого я получаю следующую ошибку:

Ошибка: +: число требуется, но получено (применить mymul (цитата (3 4))) [применить, (скоро), +]

1 Ответ

5 голосов
/ 18 апреля 2020

Функция возвращает значение последнего выражения. Так что вам нужно завершить функцию с расчетом. Сначала поставьте вызов display.

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

Кроме того, позже вы неправильно вызываете функции. Это должно быть:

(myadd 3 (mymul 3 4))

Если вы хотите использовать apply, вам нужно сделать список, содержащий результат вызова функции. Если вы цитируете весь список, это просто литерал, ничего не называется.

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