home *** CD-ROM | disk | FTP | other *** search
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; File: takr.cl
- ; Description: TAKR benchmark
- ; Author: Richard Gabriel
- ; Created: 12-Apr-85
- ; Modified: 12-Apr-85 10:12:43 (Bob Shaw)
- ; Language: Common Lisp
- ; Package: User
- ; Status: Public Domain
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- ;;; 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 tak0 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak1 (tak37 (1- x) y z)
- (tak11 (1- y) z x)
- (tak17 (1- z) x y)))))
- (defun tak1 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak2 (tak74 (1- x) y z)
- (tak22 (1- y) z x)
- (tak34 (1- z) x y)))))
- (defun tak2 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak3 (tak11 (1- x) y z)
- (tak33 (1- y) z x)
- (tak51 (1- z) x y)))))
- (defun tak3 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak4 (tak48 (1- x) y z)
- (tak44 (1- y) z x)
- (tak68 (1- z) x y)))))
- (defun tak4 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak5 (tak85 (1- x) y z)
- (tak55 (1- y) z x)
- (tak85 (1- z) x y)))))
- (defun tak5 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak6 (tak22 (1- x) y z)
- (tak66 (1- y) z x)
- (tak2 (1- z) x y)))))
- (defun tak6 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak7 (tak59 (1- x) y z)
- (tak77 (1- y) z x)
- (tak19 (1- z) x y)))))
- (defun tak7 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak8 (tak96 (1- x) y z)
- (tak88 (1- y) z x)
- (tak36 (1- z) x y)))))
- (defun tak8 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak9 (tak33 (1- x) y z)
- (tak99 (1- y) z x)
- (tak53 (1- z) x y)))))
- (defun tak9 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak10 (tak70 (1- x) y z)
- (tak10 (1- y) z x)
- (tak70 (1- z) x y)))))
- (defun tak10 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak11 (tak7 (1- x) y z)
- (tak21 (1- y) z x)
- (tak87 (1- z) x y)))))
- (defun tak11 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak12 (tak44 (1- x) y z)
- (tak32 (1- y) z x)
- (tak4 (1- z) x y)))))
- (defun tak12 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak13 (tak81 (1- x) y z)
- (tak43 (1- y) z x)
- (tak21 (1- z) x y)))))
-
- (defun tak13 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak14 (tak18 (1- x) y z)
- (tak54 (1- y) z x)
- (tak38 (1- z) x y)))))
- (defun tak14 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak15 (tak55 (1- x) y z)
- (tak65 (1- y) z x)
- (tak55 (1- z) x y)))))
- (defun tak15 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak16 (tak92 (1- x) y z)
- (tak76 (1- y) z x)
- (tak72 (1- z) x y)))))
- (defun tak16 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak17 (tak29 (1- x) y z)
- (tak87 (1- y) z x)
- (tak89 (1- z) x y)))))
- (defun tak17 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak18 (tak66 (1- x) y z)
- (tak98 (1- y) z x)
- (tak6 (1- z) x y)))))
- (defun tak18 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak19 (tak3 (1- x) y z)
- (tak9 (1- y) z x)
- (tak23 (1- z) x y)))))
- (defun tak19 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak20 (tak40 (1- x) y z)
- (tak20 (1- y) z x)
- (tak40 (1- z) x y)))))
- (defun tak20 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak21 (tak77 (1- x) y z)
- (tak31 (1- y) z x)
- (tak57 (1- z) x y)))))
- (defun tak21 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak22 (tak14 (1- x) y z)
- (tak42 (1- y) z x)
- (tak74 (1- z) x y)))))
- (defun tak22 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak23 (tak51 (1- x) y z)
- (tak53 (1- y) z x)
- (tak91 (1- z) x y)))))
- (defun tak23 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak24 (tak88 (1- x) y z)
- (tak64 (1- y) z x)
- (tak8 (1- z) x y)))))
- (defun tak24 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak25 (tak25 (1- x) y z)
- (tak75 (1- y) z x)
- (tak25 (1- z) x y)))))
- (defun tak25 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak26 (tak62 (1- x) y z)
- (tak86 (1- y) z x)
- (tak42 (1- z) x y)))))
- (defun tak26 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak27 (tak99 (1- x) y z)
- (tak97 (1- y) z x)
- (tak59 (1- z) x y)))))
- (defun tak27 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak28 (tak36 (1- x) y z)
- (tak8 (1- y) z x)
- (tak76 (1- z) x y)))))
- (defun tak28 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak29 (tak73 (1- x) y z)
- (tak19 (1- y) z x)
- (tak93 (1- z) x y)))))
- (defun tak29 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak30 (tak10 (1- x) y z)
- (tak30 (1- y) z x)
- (tak10 (1- z) x y)))))
- (defun tak30 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak31 (tak47 (1- x) y z)
- (tak41 (1- y) z x)
- (tak27 (1- z) x y)))))
- (defun tak31 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak32 (tak84 (1- x) y z)
- (tak52 (1- y) z x)
- (tak44 (1- z) x y)))))
- (defun tak32 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak33 (tak21 (1- x) y z)
- (tak63 (1- y) z x)
- (tak61 (1- z) x y)))))
- (defun tak33 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak34 (tak58 (1- x) y z)
- (tak74 (1- y) z x)
- (tak78 (1- z) x y)))))
- (defun tak34 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak35 (tak95 (1- x) y z)
- (tak85 (1- y) z x)
- (tak95 (1- z) x y)))))
- (defun tak35 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak36 (tak32 (1- x) y z)
- (tak96 (1- y) z x)
- (tak12 (1- z) x y)))))
- (defun tak36 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak37 (tak69 (1- x) y z)
- (tak7 (1- y) z x)
- (tak29 (1- z) x y)))))
- (defun tak37 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak38 (tak6 (1- x) y z)
- (tak18 (1- y) z x)
- (tak46 (1- z) x y)))))
- (defun tak38 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak39 (tak43 (1- x) y z)
- (tak29 (1- y) z x)
- (tak63 (1- z) x y)))))
- (defun tak39 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak40 (tak80 (1- x) y z)
- (tak40 (1- y) z x)
- (tak80 (1- z) x y)))))
- (defun tak40 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak41 (tak17 (1- x) y z)
- (tak51 (1- y) z x)
- (tak97 (1- z) x y)))))
- (defun tak41 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak42 (tak54 (1- x) y z)
- (tak62 (1- y) z x)
- (tak14 (1- z) x y)))))
- (defun tak42 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak43 (tak91 (1- x) y z)
- (tak73 (1- y) z x)
- (tak31 (1- z) x y)))))
- (defun tak43 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak44 (tak28 (1- x) y z)
- (tak84 (1- y) z x)
- (tak48 (1- z) x y)))))
- (defun tak44 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak45 (tak65 (1- x) y z)
- (tak95 (1- y) z x)
- (tak65 (1- z) x y)))))
- (defun tak45 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak46 (tak2 (1- x) y z)
- (tak6 (1- y) z x)
- (tak82 (1- z) x y)))))
- (defun tak46 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak47 (tak39 (1- x) y z)
- (tak17 (1- y) z x)
- (tak99 (1- z) x y)))))
- (defun tak47 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak48 (tak76 (1- x) y z)
- (tak28 (1- y) z x)
- (tak16 (1- z) x y)))))
- (defun tak48 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak49 (tak13 (1- x) y z)
- (tak39 (1- y) z x)
- (tak33 (1- z) x y)))))
- (defun tak49 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak50 (tak50 (1- x) y z)
- (tak50 (1- y) z x)
- (tak50 (1- z) x y)))))
- (defun tak50 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak51 (tak87 (1- x) y z)
- (tak61 (1- y) z x)
- (tak67 (1- z) x y)))))
- (defun tak51 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak52 (tak24 (1- x) y z)
- (tak72 (1- y) z x)
- (tak84 (1- z) x y)))))
- (defun tak52 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak53 (tak61 (1- x) y z)
- (tak83 (1- y) z x)
- (tak1 (1- z) x y)))))
- (defun tak53 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak54 (tak98 (1- x) y z)
- (tak94 (1- y) z x)
- (tak18 (1- z) x y)))))
- (defun tak54 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak55 (tak35 (1- x) y z)
- (tak5 (1- y) z x)
- (tak35 (1- z) x y)))))
- (defun tak55 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak56 (tak72 (1- x) y z)
- (tak16 (1- y) z x)
- (tak52 (1- z) x y)))))
- (defun tak56 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak57 (tak9 (1- x) y z)
- (tak27 (1- y) z x)
- (tak69 (1- z) x y)))))
- (defun tak57 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak58 (tak46 (1- x) y z)
- (tak38 (1- y) z x)
- (tak86 (1- z) x y)))))
- (defun tak58 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak59 (tak83 (1- x) y z)
- (tak49 (1- y) z x)
- (tak3 (1- z) x y)))))
- (defun tak59 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak60 (tak20 (1- x) y z)
- (tak60 (1- y) z x)
- (tak20 (1- z) x y)))))
- (defun tak60 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak61 (tak57 (1- x) y z)
- (tak71 (1- y) z x)
- (tak37 (1- z) x y)))))
- (defun tak61 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak62 (tak94 (1- x) y z)
- (tak82 (1- y) z x)
- (tak54 (1- z) x y)))))
- (defun tak62 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak63 (tak31 (1- x) y z)
- (tak93 (1- y) z x)
- (tak71 (1- z) x y)))))
- (defun tak63 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak64 (tak68 (1- x) y z)
- (tak4 (1- y) z x)
- (tak88 (1- z) x y)))))
- (defun tak64 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak65 (tak5 (1- x) y z)
- (tak15 (1- y) z x)
- (tak5 (1- z) x y)))))
- (defun tak65 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak66 (tak42 (1- x) y z)
- (tak26 (1- y) z x)
- (tak22 (1- z) x y)))))
- (defun tak66 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak67 (tak79 (1- x) y z)
- (tak37 (1- y) z x)
- (tak39 (1- z) x y)))))
- (defun tak67 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak68 (tak16 (1- x) y z)
- (tak48 (1- y) z x)
- (tak56 (1- z) x y)))))
- (defun tak68 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak69 (tak53 (1- x) y z)
- (tak59 (1- y) z x)
- (tak73 (1- z) x y)))))
- (defun tak69 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak70 (tak90 (1- x) y z)
- (tak70 (1- y) z x)
- (tak90 (1- z) x y)))))
- (defun tak70 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak71 (tak27 (1- x) y z)
- (tak81 (1- y) z x)
- (tak7 (1- z) x y)))))
- (defun tak71 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak72 (tak64 (1- x) y z)
- (tak92 (1- y) z x)
- (tak24 (1- z) x y)))))
- (defun tak72 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak73 (tak1 (1- x) y z)
- (tak3 (1- y) z x)
- (tak41 (1- z) x y)))))
- (defun tak73 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak74 (tak38 (1- x) y z)
- (tak14 (1- y) z x)
- (tak58 (1- z) x y)))))
- (defun tak74 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak75 (tak75 (1- x) y z)
- (tak25 (1- y) z x)
- (tak75 (1- z) x y)))))
- (defun tak75 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak76 (tak12 (1- x) y z)
- (tak36 (1- y) z x)
- (tak92 (1- z) x y)))))
- (defun tak76 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak77 (tak49 (1- x) y z)
- (tak47 (1- y) z x)
- (tak9 (1- z) x y)))))
- (defun tak77 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak78 (tak86 (1- x) y z)
- (tak58 (1- y) z x)
- (tak26 (1- z) x y)))))
- (defun tak78 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak79 (tak23 (1- x) y z)
- (tak69 (1- y) z x)
- (tak43 (1- z) x y)))))
- (defun tak79 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak80 (tak60 (1- x) y z)
- (tak80 (1- y) z x)
- (tak60 (1- z) x y)))))
- (defun tak80 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak81 (tak97 (1- x) y z)
- (tak91 (1- y) z x)
- (tak77 (1- z) x y)))))
- (defun tak81 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak82 (tak34 (1- x) y z)
- (tak2 (1- y) z x)
- (tak94 (1- z) x y)))))
- (defun tak82 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak83 (tak71 (1- x) y z)
- (tak13 (1- y) z x)
- (tak11 (1- z) x y)))))
- (defun tak83 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak84 (tak8 (1- x) y z)
- (tak24 (1- y) z x)
- (tak28 (1- z) x y)))))
- (defun tak84 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak85 (tak45 (1- x) y z)
- (tak35 (1- y) z x)
- (tak45 (1- z) x y)))))
- (defun tak85 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak86 (tak82 (1- x) y z)
- (tak46 (1- y) z x)
- (tak62 (1- z) x y)))))
- (defun tak86 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak87 (tak19 (1- x) y z)
- (tak57 (1- y) z x)
- (tak79 (1- z) x y)))))
- (defun tak87 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak88 (tak56 (1- x) y z)
- (tak68 (1- y) z x)
- (tak96 (1- z) x y)))))
- (defun tak88 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak89 (tak93 (1- x) y z)
- (tak79 (1- y) z x)
- (tak13 (1- z) x y)))))
- (defun tak89 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak90 (tak30 (1- x) y z)
- (tak90 (1- y) z x)
- (tak30 (1- z) x y)))))
- (defun tak90 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak91 (tak67 (1- x) y z)
- (tak1 (1- y) z x)
- (tak47 (1- z) x y)))))
- (defun tak91 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak92 (tak4 (1- x) y z)
- (tak12 (1- y) z x)
- (tak64 (1- z) x y)))))
- (defun tak92 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak93 (tak41 (1- x) y z)
- (tak23 (1- y) z x)
- (tak81 (1- z) x y)))))
- (defun tak93 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak94 (tak78 (1- x) y z)
- (tak34 (1- y) z x)
- (tak98 (1- z) x y)))))
- (defun tak94 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak95 (tak15 (1- x) y z)
- (tak45 (1- y) z x)
- (tak15 (1- z) x y)))))
- (defun tak95 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak96 (tak52 (1- x) y z)
- (tak56 (1- y) z x)
- (tak32 (1- z) x y)))))
- (defun tak96 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak97 (tak89 (1- x) y z)
- (tak67 (1- y) z x)
- (tak49 (1- z) x y)))))
- (defun tak97 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak98 (tak26 (1- x) y z)
- (tak78 (1- y) z x)
- (tak66 (1- z) x y)))))
- (defun tak98 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak99 (tak63 (1- x) y z)
- (tak89 (1- y) z x)
- (tak83 (1- z) x y)))))
- (defun tak99 (x y z)
- (declare (fixnum x y z))
- (cond ((not (< y x)) z)
- (t (tak0 (tak0 (1- x) y z)
- (tak0 (1- y) z x)
- (tak0 (1- z) x y)))))
-
- ;;; call: (tak0 18 12 6)
-
- (run-benchmark "TAKR" '(tak0 18 12 6))
-