Common Lisp:
;definicja funkcji
(defun fizz-buzz ()
(loop
for i from 1 to 100 do
(when (= (mod i 3) 0) (format t "Fizz"))
(when (= (mod i 5) 0) (format t "Buzz"))
(when (not (or (= 0 (mod i 3)) (= 0 (mod i 5))))
(format t "~D" i))
(format t "~%")))
;uruchomienie
(fizz-buzz)
EDIT 10.01.2010 Zamiast skracania kodu proponuję wersję bez jawnej iteracji ;)
C++:
#include <iostream>
void fizz_buzz_tail(int arg)
{
if(arg > 100)
{
return;
}
else if((arg % 15) == 0)
{
std::cout << "FizzBuzz" << std::endl;
}
else if((arg % 3) == 0)
{
std::cout << "Fizz" << std::endl;
}
else if((arg % 5) == 0)
{
std::cout << "Buzz" << std::endl;
}
else
{
std::cout << arg << std::endl;
}
fizz_buzz_tail(arg+1);
}
int main()
{
fizz_buzz_tail(1);
return 0;
}
Common Lisp:
(defun fizz-buzz-tail (i)
(cond ((> i 100) (return-from fizz-buzz-tail))
((zerop (mod i 15)) (format t "FizzBuzz~%"))
((zerop (mod i 3)) (format t "Fizz~%"))
((zerop (mod i 5)) (format t "Buzz~%"))
(t (format t "~D~%" i)))
(fizz-buzz-tail (1+ i)))
(fizz-buzz-tail 1)
Oba programy działają w oparciu o rekurencję ogonową, więc wykonują się tak jak iteracja :).