;;; .EnTete "Le-Lisp (c) version 15.2" " " "The Le-Lisp Benchmarks (6)"
;;; .EnPied "takr.ll" "%" " "
;;; .SuperTitre "The Le-Lisp Benchmarks (6)"
;;;
;;; .Centre "*****************************************************************"
;;; .Centre " Ce fichier est en lecture seule hors du projet ALE de l'INRIA. "
;;; .Centre " Il est maintenu par ILOG SA, 2 Avenue Gallie'ni, 94250 Gentilly "
;;; .Centre " (c) Le-Lisp est une marque de'pose'e de l'INRIA "
;;; .Centre "*****************************************************************"
;;;
;;; .Centre "$Header: takr.ll,v 1.1 88/10/29 22:11:10 chaillou Exp $"
;;; (6) TAKR
;;; TAKR -- 100 function (count `em) version of TAK that tries to defeat cache
;;; memory effects. Results should be the same as for TAK on stack machines.
;;; Distribution of calls is not completely flat.
(defun check-takr ()
(check-value '(test-takr 1) 7))
(defun meter-takr ()
(perform-meter '(takr 18 12 6) 'takr))
(defun test-takr (n)
(if (eq n 1)
(takr 18 12 6)
(repeat n (takr 18 12 6))))
(defun takr (x y z)
(cond ((not (lt y x)) z)
(t (tak1 (tak37 (sub1 x) y z)
(tak11 (sub1 y) z x)
(tak17 (sub1 z) x y)))))
(defun tak1 (x y z)
(cond ((not (lt y x)) z)
(t (tak2 (tak74 (sub1 x) y z)
(tak22 (sub1 y) z x)
(tak34 (sub1 z) x y)))))
(defun tak2 (x y z)
(cond ((not (lt y x)) z)
(t (tak3 (tak11 (sub1 x) y z)
(tak33 (sub1 y) z x)
(tak51 (sub1 z) x y)))))
(defun tak3 (x y z)
(cond ((not (lt y x)) z)
(t (tak4 (tak48 (sub1 x) y z)
(tak44 (sub1 y) z x)
(tak68 (sub1 z) x y)))))
(defun tak4 (x y z)
(cond ((not (lt y x)) z)
(t (tak5 (tak85 (sub1 x) y z)
(tak55 (sub1 y) z x)
(tak85 (sub1 z) x y)))))
(defun tak5 (x y z)
(cond ((not (lt y x)) z)
(t (tak6 (tak22 (sub1 x) y z)
(tak66 (sub1 y) z x)
(tak2 (sub1 z) x y)))))
(defun tak6 (x y z)
(cond ((not (lt y x)) z)
(t (tak7 (tak59 (sub1 x) y z)
(tak77 (sub1 y) z x)
(tak19 (sub1 z) x y)))))
(defun tak7 (x y z)
(cond ((not (lt y x)) z)
(t (tak8 (tak96 (sub1 x) y z)
(tak88 (sub1 y) z x)
(tak36 (sub1 z) x y)))))
(defun tak8 (x y z)
(cond ((not (lt y x)) z)
(t (tak9 (tak33 (sub1 x) y z)
(tak99 (sub1 y) z x)
(tak53 (sub1 z) x y)))))
(defun tak9 (x y z)
(cond ((not (lt y x)) z)
(t (tak10 (tak70 (sub1 x) y z)
(tak10 (sub1 y) z x)
(tak70 (sub1 z) x y)))))
(defun tak10 (x y z)
(cond ((not (lt y x)) z)
(t (tak11 (tak7 (sub1 x) y z)
(tak21 (sub1 y) z x)
(tak87 (sub1 z) x y)))))
(defun tak11 (x y z)
(cond ((not (lt y x)) z)
(t (tak12 (tak44 (sub1 x) y z)
(tak32 (sub1 y) z x)
(tak4 (sub1 z) x y)))))
(defun tak12 (x y z)
(cond ((not (lt y x)) z)
(t (tak13 (tak81 (sub1 x) y z)
(tak43 (sub1 y) z x)
(tak21 (sub1 z) x y)))))
(defun tak13 (x y z)
(cond ((not (lt y x)) z)
(t (tak14 (tak18 (sub1 x) y z)
(tak54 (sub1 y) z x)
(tak38 (sub1 z) x y)))))
(defun tak14 (x y z)
(cond ((not (lt y x)) z)
(t (tak15 (tak55 (sub1 x) y z)
(tak65 (sub1 y) z x)
(tak55 (sub1 z) x y)))))
(defun tak15 (x y z)
(cond ((not (lt y x)) z)
(t (tak16 (tak92 (sub1 x) y z)
(tak76 (sub1 y) z x)
(tak72 (sub1 z) x y)))))
(defun tak16 (x y z)
(cond ((not (lt y x)) z)
(t (tak17 (tak29 (sub1 x) y z)
(tak87 (sub1 y) z x)
(tak89 (sub1 z) x y)))))
(defun tak17 (x y z)
(cond ((not (lt y x)) z)
(t (tak18 (tak66 (sub1 x) y z)
(tak98 (sub1 y) z x)
(tak6 (sub1 z) x y)))))
(defun tak18 (x y z)
(cond ((not (lt y x)) z)
(t (tak19 (tak3 (sub1 x) y z)
(tak9 (sub1 y) z x)
(tak23 (sub1 z) x y)))))
(defun tak19 (x y z)
(cond ((not (lt y x)) z)
(t (tak20 (tak40 (sub1 x) y z)
(tak20 (sub1 y) z x)
(tak40 (sub1 z) x y)))))
(defun tak20 (x y z)
(cond ((not (lt y x)) z)
(t (tak21 (tak77 (sub1 x) y z)
(tak31 (sub1 y) z x)
(tak57 (sub1 z) x y)))))
(defun tak21 (x y z)
(cond ((not (lt y x)) z)
(t (tak22 (tak14 (sub1 x) y z)
(tak42 (sub1 y) z x)
(tak74 (sub1 z) x y)))))
(defun tak22 (x y z)
(cond ((not (lt y x)) z)
(t (tak23 (tak51 (sub1 x) y z)
(tak53 (sub1 y) z x)
(tak91 (sub1 z) x y)))))
(defun tak23 (x y z)
(cond ((not (lt y x)) z)
(t (tak24 (tak88 (sub1 x) y z)
(tak64 (sub1 y) z x)
(tak8 (sub1 z) x y)))))
(defun tak24 (x y z)
(cond ((not (lt y x)) z)
(t (tak25 (tak25 (sub1 x) y z)
(tak75 (sub1 y) z x)
(tak25 (sub1 z) x y)))))
(defun tak25 (x y z)
(cond ((not (lt y x)) z)
(t (tak26 (tak62 (sub1 x) y z)
(tak86 (sub1 y) z x)
(tak42 (sub1 z) x y)))))
(defun tak26 (x y z)
(cond ((not (lt y x)) z)
(t (tak27 (tak99 (sub1 x) y z)
(tak97 (sub1 y) z x)
(tak59 (sub1 z) x y)))))
(defun tak27 (x y z)
(cond ((not (lt y x)) z)
(t (tak28 (tak36 (sub1 x) y z)
(tak8 (sub1 y) z x)
(tak76 (sub1 z) x y)))))
(defun tak28 (x y z)
(cond ((not (lt y x)) z)
(t (tak29 (tak73 (sub1 x) y z)
(tak19 (sub1 y) z x)
(tak93 (sub1 z) x y)))))
(defun tak29 (x y z)
(cond ((not (lt y x)) z)
(t (tak30 (tak10 (sub1 x) y z)
(tak30 (sub1 y) z x)
(tak10 (sub1 z) x y)))))
(defun tak30 (x y z)
(cond ((not (lt y x)) z)
(t (tak31 (tak47 (sub1 x) y z)
(tak41 (sub1 y) z x)
(tak27 (sub1 z) x y)))))
(defun tak31 (x y z)
(cond ((not (lt y x)) z)
(t (tak32 (tak84 (sub1 x) y z)
(tak52 (sub1 y) z x)
(tak44 (sub1 z) x y)))))
(defun tak32 (x y z)
(cond ((not (lt y x)) z)
(t (tak33 (tak21 (sub1 x) y z)
(tak63 (sub1 y) z x)
(tak61 (sub1 z) x y)))))
(defun tak33 (x y z)
(cond ((not (lt y x)) z)
(t (tak34 (tak58 (sub1 x) y z)
(tak74 (sub1 y) z x)
(tak78 (sub1 z) x y)))))
(defun tak34 (x y z)
(cond ((not (lt y x)) z)
(t (tak35 (tak95 (sub1 x) y z)
(tak85 (sub1 y) z x)
(tak95 (sub1 z) x y)))))
(defun tak35 (x y z)
(cond ((not (lt y x)) z)
(t (tak36 (tak32 (sub1 x) y z)
(tak96 (sub1 y) z x)
(tak12 (sub1 z) x y)))))
(defun tak36 (x y z)
(cond ((not (lt y x)) z)
(t (tak37 (tak69 (sub1 x) y z)
(tak7 (sub1 y) z x)
(tak29 (sub1 z) x y)))))
(defun tak37 (x y z)
(cond ((not (lt y x)) z)
(t (tak38 (tak6 (sub1 x) y z)
(tak18 (sub1 y) z x)
(tak46 (sub1 z) x y)))))
(defun tak38 (x y z)
(cond ((not (lt y x)) z)
(t (tak39 (tak43 (sub1 x) y z)
(tak29 (sub1 y) z x)
(tak63 (sub1 z) x y)))))
(defun tak39 (x y z)
(cond ((not (lt y x)) z)
(t (tak40 (tak80 (sub1 x) y z)
(tak40 (sub1 y) z x)
(tak80 (sub1 z) x y)))))
(defun tak40 (x y z)
(cond ((not (lt y x)) z)
(t (tak41 (tak17 (sub1 x) y z)
(tak51 (sub1 y) z x)
(tak97 (sub1 z) x y)))))
(defun tak41 (x y z)
(cond ((not (lt y x)) z)
(t (tak42 (tak54 (sub1 x) y z)
(tak62 (sub1 y) z x)
(tak14 (sub1 z) x y)))))
(defun tak42 (x y z)
(cond ((not (lt y x)) z)
(t (tak43 (tak91 (sub1 x) y z)
(tak73 (sub1 y) z x)
(tak31 (sub1 z) x y)))))
(defun tak43 (x y z)
(cond ((not (lt y x)) z)
(t (tak44 (tak28 (sub1 x) y z)
(tak84 (sub1 y) z x)
(tak48 (sub1 z) x y)))))
(defun tak44 (x y z)
(cond ((not (lt y x)) z)
(t (tak45 (tak65 (sub1 x) y z)
(tak95 (sub1 y) z x)
(tak65 (sub1 z) x y)))))
(defun tak45 (x y z)
(cond ((not (lt y x)) z)
(t (tak46 (tak2 (sub1 x) y z)
(tak6 (sub1 y) z x)
(tak82 (sub1 z) x y)))))
(defun tak46 (x y z)
(cond ((not (lt y x)) z)
(t (tak47 (tak39 (sub1 x) y z)
(tak17 (sub1 y) z x)
(tak99 (sub1 z) x y)))))
(defun tak47 (x y z)
(cond ((not (lt y x)) z)
(t (tak48 (tak76 (sub1 x) y z)
(tak28 (sub1 y) z x)
(tak16 (sub1 z) x y)))))
(defun tak48 (x y z)
(cond ((not (lt y x)) z)
(t (tak49 (tak13 (sub1 x) y z)
(tak39 (sub1 y) z x)
(tak33 (sub1 z) x y)))))
(defun tak49 (x y z)
(cond ((not (lt y x)) z)
(t (tak50 (tak50 (sub1 x) y z)
(tak50 (sub1 y) z x)
(tak50 (sub1 z) x y)))))
(defun tak50 (x y z)
(cond ((not (lt y x)) z)
(t (tak51 (tak87 (sub1 x) y z)
(tak61 (sub1 y) z x)
(tak67 (sub1 z) x y)))))
(defun tak51 (x y z)
(cond ((not (lt y x)) z)
(t (tak52 (tak24 (sub1 x) y z)
(tak72 (sub1 y) z x)
(tak84 (sub1 z) x y)))))
(defun tak52 (x y z)
(cond ((not (lt y x)) z)
(t (tak53 (tak61 (sub1 x) y z)
(tak83 (sub1 y) z x)
(tak1 (sub1 z) x y)))))
(defun tak53 (x y z)
(cond ((not (lt y x)) z)
(t (tak54 (tak98 (sub1 x) y z)
(tak94 (sub1 y) z x)
(tak18 (sub1 z) x y)))))
(defun tak54 (x y z)
(cond ((not (lt y x)) z)
(t (tak55 (tak35 (sub1 x) y z)
(tak5 (sub1 y) z x)
(tak35 (sub1 z) x y)))))
(defun tak55 (x y z)
(cond ((not (lt y x)) z)
(t (tak56 (tak72 (sub1 x) y z)
(tak16 (sub1 y) z x)
(tak52 (sub1 z) x y)))))
(defun tak56 (x y z)
(cond ((not (lt y x)) z)
(t (tak57 (tak9 (sub1 x) y z)
(tak27 (sub1 y) z x)
(tak69 (sub1 z) x y)))))
(defun tak57 (x y z)
(cond ((not (lt y x)) z)
(t (tak58 (tak46 (sub1 x) y z)
(tak38 (sub1 y) z x)
(tak86 (sub1 z) x y)))))
(defun tak58 (x y z)
(cond ((not (lt y x)) z)
(t (tak59 (tak83 (sub1 x) y z)
(tak49 (sub1 y) z x)
(tak3 (sub1 z) x y)))))
(defun tak59 (x y z)
(cond ((not (lt y x)) z)
(t (tak60 (tak20 (sub1 x) y z)
(tak60 (sub1 y) z x)
(tak20 (sub1 z) x y)))))
(defun tak60 (x y z)
(cond ((not (lt y x)) z)
(t (tak61 (tak57 (sub1 x) y z)
(tak71 (sub1 y) z x)
(tak37 (sub1 z) x y)))))
(defun tak61 (x y z)
(cond ((not (lt y x)) z)
(t (tak62 (tak94 (sub1 x) y z)
(tak82 (sub1 y) z x)
(tak54 (sub1 z) x y)))))
(defun tak62 (x y z)
(cond ((not (lt y x)) z)
(t (tak63 (tak31 (sub1 x) y z)
(tak93 (sub1 y) z x)
(tak71 (sub1 z) x y)))))
(defun tak63 (x y z)
(cond ((not (lt y x)) z)
(t (tak64 (tak68 (sub1 x) y z)
(tak4 (sub1 y) z x)
(tak88 (sub1 z) x y)))))
(defun tak64 (x y z)
(cond ((not (lt y x)) z)
(t (tak65 (tak5 (sub1 x) y z)
(tak15 (sub1 y) z x)
(tak5 (sub1 z) x y)))))
(defun tak65 (x y z)
(cond ((not (lt y x)) z)
(t (tak66 (tak42 (sub1 x) y z)
(tak26 (sub1 y) z x)
(tak22 (sub1 z) x y)))))
(defun tak66 (x y z)
(cond ((not (lt y x)) z)
(t (tak67 (tak79 (sub1 x) y z)
(tak37 (sub1 y) z x)
(tak39 (sub1 z) x y)))))
(defun tak67 (x y z)
(cond ((not (lt y x)) z)
(t (tak68 (tak16 (sub1 x) y z)
(tak48 (sub1 y) z x)
(tak56 (sub1 z) x y)))))
(defun tak68 (x y z)
(cond ((not (lt y x)) z)
(t (tak69 (tak53 (sub1 x) y z)
(tak59 (sub1 y) z x)
(tak73 (sub1 z) x y)))))
(defun tak69 (x y z)
(cond ((not (lt y x)) z)
(t (tak70 (tak90 (sub1 x) y z)
(tak70 (sub1 y) z x)
(tak90 (sub1 z) x y)))))
(defun tak70 (x y z)
(cond ((not (lt y x)) z)
(t (tak71 (tak27 (sub1 x) y z)
(tak81 (sub1 y) z x)
(tak7 (sub1 z) x y)))))
(defun tak71 (x y z)
(cond ((not (lt y x)) z)
(t (tak72 (tak64 (sub1 x) y z)
(tak92 (sub1 y) z x)
(tak24 (sub1 z) x y)))))
(defun tak72 (x y z)
(cond ((not (lt y x)) z)
(t (tak73 (tak1 (sub1 x) y z)
(tak3 (sub1 y) z x)
(tak41 (sub1 z) x y)))))
(defun tak73 (x y z)
(cond ((not (lt y x)) z)
(t (tak74 (tak38 (sub1 x) y z)
(tak14 (sub1 y) z x)
(tak58 (sub1 z) x y)))))
(defun tak74 (x y z)
(cond ((not (lt y x)) z)
(t (tak75 (tak75 (sub1 x) y z)
(tak25 (sub1 y) z x)
(tak75 (sub1 z) x y)))))
(defun tak75 (x y z)
(cond ((not (lt y x)) z)
(t (tak76 (tak12 (sub1 x) y z)
(tak36 (sub1 y) z x)
(tak92 (sub1 z) x y)))))
(defun tak76 (x y z)
(cond ((not (lt y x)) z)
(t (tak77 (tak49 (sub1 x) y z)
(tak47 (sub1 y) z x)
(tak9 (sub1 z) x y)))))
(defun tak77 (x y z)
(cond ((not (lt y x)) z)
(t (tak78 (tak86 (sub1 x) y z)
(tak58 (sub1 y) z x)
(tak26 (sub1 z) x y)))))
(defun tak78 (x y z)
(cond ((not (lt y x)) z)
(t (tak79 (tak23 (sub1 x) y z)
(tak69 (sub1 y) z x)
(tak43 (sub1 z) x y)))))
(defun tak79 (x y z)
(cond ((not (lt y x)) z)
(t (tak80 (tak60 (sub1 x) y z)
(tak80 (sub1 y) z x)
(tak60 (sub1 z) x y)))))
(defun tak80 (x y z)
(cond ((not (lt y x)) z)
(t (tak81 (tak97 (sub1 x) y z)
(tak91 (sub1 y) z x)
(tak77 (sub1 z) x y)))))
(defun tak81 (x y z)
(cond ((not (lt y x)) z)
(t (tak82 (tak34 (sub1 x) y z)
(tak2 (sub1 y) z x)
(tak94 (sub1 z) x y)))))
(defun tak82 (x y z)
(cond ((not (lt y x)) z)
(t (tak83 (tak71 (sub1 x) y z)
(tak13 (sub1 y) z x)
(tak11 (sub1 z) x y)))))
(defun tak83 (x y z)
(cond ((not (lt y x)) z)
(t (tak84 (tak8 (sub1 x) y z)
(tak24 (sub1 y) z x)
(tak28 (sub1 z) x y)))))
(defun tak84 (x y z)
(cond ((not (lt y x)) z)
(t (tak85 (tak45 (sub1 x) y z)
(tak35 (sub1 y) z x)
(tak45 (sub1 z) x y)))))
(defun tak85 (x y z)
(cond ((not (lt y x)) z)
(t (tak86 (tak82 (sub1 x) y z)
(tak46 (sub1 y) z x)
(tak62 (sub1 z) x y)))))
(defun tak86 (x y z)
(cond ((not (lt y x)) z)
(t (tak87 (tak19 (sub1 x) y z)
(tak57 (sub1 y) z x)
(tak79 (sub1 z) x y)))))
(defun tak87 (x y z)
(cond ((not (lt y x)) z)
(t (tak88 (tak56 (sub1 x) y z)
(tak68 (sub1 y) z x)
(tak96 (sub1 z) x y)))))
(defun tak88 (x y z)
(cond ((not (lt y x)) z)
(t (tak89 (tak93 (sub1 x) y z)
(tak79 (sub1 y) z x)
(tak13 (sub1 z) x y)))))
(defun tak89 (x y z)
(cond ((not (lt y x)) z)
(t (tak90 (tak30 (sub1 x) y z)
(tak90 (sub1 y) z x)
(tak30 (sub1 z) x y)))))
(defun tak90 (x y z)
(cond ((not (lt y x)) z)
(t (tak91 (tak67 (sub1 x) y z)
(tak1 (sub1 y) z x)
(tak47 (sub1 z) x y)))))
(defun tak91 (x y z)
(cond ((not (lt y x)) z)
(t (tak92 (tak4 (sub1 x) y z)
(tak12 (sub1 y) z x)
(tak64 (sub1 z) x y)))))
(defun tak92 (x y z)
(cond ((not (lt y x)) z)
(t (tak93 (tak41 (sub1 x) y z)
(tak23 (sub1 y) z x)
(tak81 (sub1 z) x y)))))
(defun tak93 (x y z)
(cond ((not (lt y x)) z)
(t (tak94 (tak78 (sub1 x) y z)
(tak34 (sub1 y) z x)
(tak98 (sub1 z) x y)))))
(defun tak94 (x y z)
(cond ((not (lt y x)) z)
(t (tak95 (tak15 (sub1 x) y z)
(tak45 (sub1 y) z x)
(tak15 (sub1 z) x y)))))
(defun tak95 (x y z)
(cond ((not (lt y x)) z)
(t (tak96 (tak52 (sub1 x) y z)
(tak56 (sub1 y) z x)
(tak32 (sub1 z) x y)))))
(defun tak96 (x y z)
(cond ((not (lt y x)) z)
(t (tak97 (tak89 (sub1 x) y z)
(tak67 (sub1 y) z x)
(tak49 (sub1 z) x y)))))
(defun tak97 (x y z)
(cond ((not (lt y x)) z)
(t (tak98 (tak26 (sub1 x) y z)
(tak78 (sub1 y) z x)
(tak66 (sub1 z) x y)))))
(defun tak98 (x y z)
(cond ((not (lt y x)) z)
(t (tak99 (tak63 (sub1 x) y z)
(tak89 (sub1 y) z x)
(tak83 (sub1 z) x y)))))
(defun tak99 (x y z)
(cond ((not (lt y x)) z)
(t (takr (takr (sub1 x) y z)
(takr (sub1 y) z x)
(takr (sub1 z) x y)))))