Подумайте, что должно произойти, когда .. Например.если вы напишите
(begin (display 1)
(display 2)
(display 3))
В каком порядке отображаются цифры?Итак, давайте преобразуем это в то, что вам нужно сделать.Я понятия не имею, почему вы считаете x
и y
хорошими значениями, поэтому я думаю, что у вас должен быть контракт .. Так как вы уже знаете первое значение (1), вам нужен только n
, поэтому я предлагаю:
(define (print-to-and-from n)
...)
Вот некоторые ожидания
(print-to-and-from 0) ; nothing printed (or whatever)
(print-to-and-from 1) ; 1 printed only once (perhaps)
(print-to-and-from 2) ; 1, 2, 1 printed
(print-to-and-from 3) ; 1, 2, 3, 2, 1 printed
Вам необходимо знать, что вы в данный момент используете 1
или 2
и т. Д., Поэтому вам нужно связывание, которое не является частьюконтракт.Это вы можете сделать с помощником.
(define (print-to-and-from n)
(define (helper cur)
; In here you can compare cur to n
; and increase cur on consecutive calls
...)
(helper 1))
Теперь, если вы посмотрите на результаты от 2
и 3
с точки зрения отношения к 2
и 3
, вы увидите, что вторая рекурсия (print-to-and-from 3)
- этотакой же как (print-to-and-from 2)
.Таким образом, вы хотите, чтобы регистр по умолчанию печатался до и после следующей рекурсии, чтобы вы печатали 1
, затем выполняли 2, 3, 2
, вы возвращали элемент управления и печатали 1
с первого шага.Так же, как первый код в моем ансере, кроме второго display
, это вызов helper
.
Также обратите внимание, что когда он останавливается, он выводит значение остановки только один раз, даже если оно 1
.Таким образом, ваш базовый случай должен печатать только текущее значение.
NB Возможно, проще сделать помощника глобальной переменной.Это делается с помощью лямбда-лифтинга.например.сделайте все переменные замыкания связанными:
(define (print-to-and-from-helper cur n)
; In here you can compare cur to n
; and increase cur on consecutive calls
...)
(define (print-to-and-from n)
(print-to-and-from-helper 1 n))
Это не сильно изменит программу, за исключением того, что вам нужно написать немного больше.Преимущество в том, что вы можете проверить помощника индивидуально.Удачи!