[ create a new paste ] login | about

Link: http://codepad.org/gnMxD2Zf    [ raw code | fork ]

Scheme, pasted on Mar 7:
;;;お題
;;;1からN未満の自然数で3または5の倍数の合計を求めよ
;;;ただし、9で割り切れる数は除外すること
;;;(foo n 結果表示関数) -> 合計 倍数のリスト
(define foo
  (lambda (n col)
	(cond
	 ((zero? n) (col 0 '()))
	 ((and (or (zero? (mod n 5))
			   (zero? (mod n 3)))
		   (not (zero? (mod n 9))))
	  (foo
	   (1- n)
	   (lambda (x y)
		 (col (+ n x) (cons n y)))))
	 (else
	  (foo (1- n) (lambda (x y) (col x y)))))))

;;;実行例
;;;N=30なら合計は171,倍数リストは以下のごとし
(foo 30 list)
(171 (30 25 24 21 20 15 12 10 6 5 3))

;;;N=1000000なら合計は188889611109
;;;リストは長いので非表示指示
(foo 1000000 (lambda (x y) x))
177778222224

;;;N=300000
(foo 300000 (lambda (x y) x))
16000100001


Create a new paste based on this one


Comments: