Я нашел интересную вещь. Проходящий аргумент может заслуживать рассмотрения, особенно в ситуации, когда важно время. код, как показано ниже.стоимость аргумента, проходящая в схеме
(define (collatz-num n)
(define (collatz-iter n m)
(cond
((= n 1)
m)
((even? n)
(collatz-iter (/ n 2) (+ m 1)))
(else
(collatz-iter (+ (* 3 n) 1) (+ m 1)))))
(collatz-iter n 1))
(define (collatz-iter n m)
(cond
((= n 1)
m)
((even? n)
(collatz-iter (/ n 2) (+ m 1)))
(else
(collatz-iter (+ (* 3 n) 1) (+ m 1)))))
(define (euler14 n limit)
(define (help-iter m len n limit)
(let ((collatz (collatz-iter n 1)))
(cond
((> n limit)
(list m len))
((> collatz len)
(help-iter n collatz (+ n 2) limit))
(else
(help-iter m len (+ n 2) limit)))))
(help-iter 0 0 n limit))
для Коллатца-ITER
> (time (euler14 1 1000000))
cpu time: 1596 real time: 1596 gc time: 0
для Коллатца-NUM
> (time (euler14 1 1000000))
cpu time: 1787 real time: 1789 gc time: 0
Мой вопрос:
Насколько велика стоимость прохождения аргумента в схеме
В функции euler14, я позволяю предел в качестве аргумента справки-ITER, это будет сэкономить время этот путь? как я где-то видел, свободная переменная будет стоить.
Возможно, я слишком скупо.
У вас есть вопросы? – Clive
Я обновляю вопрос. – kuan291
Неужели кто-нибудь ответил на ваш предыдущий вопрос о производительности для вашего удовлетворения? – GoZoner