Отображение на выходной порт в рекурсивной процедуре - Схема - PullRequest
2 голосов
/ 27 декабря 2011

Я изучаю Scheme и хочу написать рекурсивную процедуру, которая выводит данные на консоль на каждом уровне выполнения:

(define (dummy count)
    (if (= 0 count)        
        (runtime)
        ((display "test" console-i/o-port) (dummy (- count 1)))))

И затем проверяется с помощью:

(dummy 10)

Но, похоже,что будет распечатан только результат последней вызванной процедуры.Что я должен сделать, чтобы это произошло?Благодарю.(Я использую Mit-схему)

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Если вы хотите отобразить «test» count количество раз (в примере 10), вы можете сделать что-то вроде этого (при условии, что count положительно):

(define (dummy count)
  (if (> count 0)
      (begin 
        (display "test" console-i/o-port)
        (dummy (- count 1)))))
2 голосов
/ 27 декабря 2011
((display "test" console-i/o-port) (dummy (- count 1)))

Это вызов функции, где (display "test" console-i/o-port) - это функция, которая должна вызываться, а (dummy (- count 1)) - аргумент этой функции. Поскольку `(отображать" test "console-i / o-port) фактически не возвращает функцию, это приведет к ошибке (после печати test).

Чтобы сделать то, что вы на самом деле хотите (сначала выполните (display ...), а затем (dummy ...)), вы можете использовать форму begin следующим образом:

(begin (display "test" console-i/o-port) (dummy (- count 1)))
...