Установите начальное значение и сосчитайте до n, а затем вернитесь к начальному значению. - PullRequest
0 голосов
/ 14 октября 2018

В основном мне нужно установить начальное значение (1) и сосчитать до моего n и обратно до единицы.И для каждого расчета мне нужно отобразить значение.Это то, что у меня есть сейчас:

(define (teken-symbolen x y)
  (begin (display x) (display y) (display x)))


(define (teken-n x y n)
  (cond ((or(= n 0) (< n 0)) (display onmogelijk))
        ((= n 1) (teken-symbolen x y))
        (else (begin
                (teken-symbolen x y)
                (teken-n x y (- n 1))))))

В настоящее время это показывает только значение n, в то время как мне нужно отображать все вычисления от одного к моему значению n и обратно к одному снова, все в другой строкеЯ решил, что могу использовать (новую строку) для.

Любая помощь, которую я буду очень признателен.

1 Ответ

0 голосов
/ 14 октября 2018

Подумайте, что должно произойти, когда .. Например.если вы напишите

(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))

Это не сильно изменит программу, за исключением того, что вам нужно написать немного больше.Преимущество в том, что вы можете проверить помощника индивидуально.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...