2015-10-04 4 views
0

Я пытался проверить небольшую часть кода и по какой-то причине у меня есть некоторые ошибки. вот код. здесь tab - это просто функция, возвращающая список, а другая функция - translate.Как вызвать функцию в схеме

(define p 
    (let ((x (car tab)) (y (cadr tab))) 
    (list translate(x) y))) 

ответ

1

Вызов функции записывается в виде (f args), где f это имя функции и args разделенных пробелами последовательности аргументов.

Так называть tab без аргументов, вы бы написать (tab) и называть translate с аргументом x, вы бы написать (translate x).

+0

Спасибо! (Это показало, что мне нужно отдохнуть :)) –

1

+ обычная процедура в схеме, и если вы оцениваете это оценит символ, и вы получите в зависимости от реализации представление объекта процедуры:

+ ; ==> <procedure: +> (or something similar) 

Теперь + просто переменная, , при оценке, оценивает процедуру. Как назвать это просто suround его в скобках:

(+) ; ==> 0 

Что происходит, что схема видит круглые скобки, затем вычисляет первый аргумент + и становится процедура <procedure: +>. Поскольку это процедура, аргументы оцениваются в любом порядке, и последняя процедура применяется с этими оцененными аргументами.

Если tab является объектом процедуры, которую вы не можете применить car или cdr. Вы можете сделать это до результата вызова, если он оценит пару. Аналогично, если вы хотите вызвать процедуру translate с аргументом x, это должно выглядеть как (translate x). Соединив все это:

(define p 
    (let* ((tab-result (tab)) 
     (x (car tab-result)) 
     (y (cadr tab-result))) 
    (list (translate x) y))) 
+0

спасибо :). ура –

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