Новое в схеме здесь. Я пытаюсь скомпилировать функцию схемы, range
. Это очень просто - он принимает start
, step
и stop
list L
и делает новый список, где каждый элемент = stepAmt + curStep.Невозможно скомпилировать функцию схемы
Например: (диапазон '(0 2 7)) => (0 2 4 6), (диапазон' (2 2 0)) =>()
При попытке компиляции
(define (helper2(start stepAmt stop curStep newList)
(if (> start stop)
'()
(if (> (+ stepAmt curStep) stop)
newList
(helper2 (start stepAmt stop (+ stepAmt curStep) (concat newList (+stepAmt curStep))))))))
Я получаю ошибку
некорректные специальную форму: (определить helper2 (начало stepamt остановка curstep NewList) (если ... ... ...))
Я не уверен, что это значит. Я дважды проверял свою логику и круглые скобки и не могу понять это.
Это функция, которая будет вызывать эту функцию:
(define (example L)
(let (
(start (car L))
(curStep (car (cdr L)))
(step (car (cdr L)))
(stop (car (cdr (cdr L))))
)
(helper2 (start step stop curStep '()))
)
)
Все указатели было бы здорово. Я не уверен, что это опечатка или логическая ошибка. Спасибо!
Hi @iaacp. Используйте (helper2 start step stop curStep '() в вашей примерной функции и устраните аналогичную проблему в helper2. В схеме не разрешается вставлять дополнительные скобки. Скобка в (начальный шаг ...) означает: Вызвать функцию, заданную начните с аргументов step ... Обратите внимание, что решение Rajesh не имеет таких круглых скобок. – soegaard
Если у вас есть второй вопрос, отправьте его как отдельный вопрос. – Marcin