方案有功能調用功能n次。我不希望map/for-each函數沒有任何參數。沿此線的東西: -方案功能調用程序n次
(define (call-n-times proc n)
(if (= 0 n)
'()
(cons (proc) (call-n-times proc (- n 1)))))
(call-n-times read 10)
方案有功能調用功能n次。我不希望map/for-each函數沒有任何參數。沿此線的東西: -方案功能調用程序n次
(define (call-n-times proc n)
(if (= 0 n)
'()
(cons (proc) (call-n-times proc (- n 1)))))
(call-n-times read 10)
手工實現tail-recursion modulo cons優化,建立與O(1)額外的空間所產生的名單:
(define (iterate0-n proc n) ; iterate a 0-arguments procedure n times
(let ((res (list 1))) ; return a list of results in order
(let loop ((i n) (p res))
(if (< i 1)
(cdr res)
(begin
(set-cdr! p (list (proc)))
(loop (- i 1) (cdr p)))))))
這技術第一(?)在Friedman and Wise's TR19中描述。
很酷。我現在會用我自己的一個。我想知道他們爲什麼離開這個標準。很高興知道這不是太明顯:) – Himanshu
@Himanshu Scheme,至少在早期版本中,是一個非常簡單的語言。事實上,這是一個非常簡單的工具來編寫是一個很好的理由,讓它脫離語言。 「只有三條線,寫起來很容易,我們不需要把它寫入規範。」 :) –
@JoshuaTaylor是的,聽起來很合理。我認爲Scheme最小化是最有吸引力的功能。 – Himanshu