1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2; File: takr.sch 3; Description: TAKR benchmark 4; Author: Richard Gabriel 5; Created: 12-Apr-85 6; Modified: 12-Apr-85 10:12:43 (Bob Shaw) 7; 22-Jul-87 (Will Clinger) 8; Language: Scheme 9; Status: Public Domain 10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 11 12;;; TAKR -- 100 function (count `em) version of TAK that tries to defeat cache 13;;; memory effects. Results should be the same as for TAK on stack machines. 14;;; Distribution of calls is not completely flat. 15 16(define (tak x y z) 17 (define (tak0 x y z) 18 (cond ((not (< y x)) z) 19 (else (tak1 (tak37 (- x 1) y z) 20 (tak11 (- y 1) z x) 21 (tak17 (- z 1) x y))))) 22 (define (tak1 x y z) 23 (cond ((not (< y x)) z) 24 (else (tak2 (tak74 (- x 1) y z) 25 (tak22 (- y 1) z x) 26 (tak34 (- z 1) x y))))) 27 (define (tak2 x y z) 28 (cond ((not (< y x)) z) 29 (else (tak3 (tak11 (- x 1) y z) 30 (tak33 (- y 1) z x) 31 (tak51 (- z 1) x y))))) 32 (define (tak3 x y z) 33 (cond ((not (< y x)) z) 34 (else (tak4 (tak48 (- x 1) y z) 35 (tak44 (- y 1) z x) 36 (tak68 (- z 1) x y))))) 37 (define (tak4 x y z) 38 (cond ((not (< y x)) z) 39 (else (tak5 (tak85 (- x 1) y z) 40 (tak55 (- y 1) z x) 41 (tak85 (- z 1) x y))))) 42 (define (tak5 x y z) 43 (cond ((not (< y x)) z) 44 (else (tak6 (tak22 (- x 1) y z) 45 (tak66 (- y 1) z x) 46 (tak2 (- z 1) x y))))) 47 (define (tak6 x y z) 48 (cond ((not (< y x)) z) 49 (else (tak7 (tak59 (- x 1) y z) 50 (tak77 (- y 1) z x) 51 (tak19 (- z 1) x y))))) 52 (define (tak7 x y z) 53 (cond ((not (< y x)) z) 54 (else (tak8 (tak96 (- x 1) y z) 55 (tak88 (- y 1) z x) 56 (tak36 (- z 1) x y))))) 57 (define (tak8 x y z) 58 (cond ((not (< y x)) z) 59 (else (tak9 (tak33 (- x 1) y z) 60 (tak99 (- y 1) z x) 61 (tak53 (- z 1) x y))))) 62 (define (tak9 x y z) 63 (cond ((not (< y x)) z) 64 (else (tak10 (tak70 (- x 1) y z) 65 (tak10 (- y 1) z x) 66 (tak70 (- z 1) x y))))) 67 (define (tak10 x y z) 68 (cond ((not (< y x)) z) 69 (else (tak11 (tak7 (- x 1) y z) 70 (tak21 (- y 1) z x) 71 (tak87 (- z 1) x y))))) 72 (define (tak11 x y z) 73 (cond ((not (< y x)) z) 74 (else (tak12 (tak44 (- x 1) y z) 75 (tak32 (- y 1) z x) 76 (tak4 (- z 1) x y))))) 77 (define (tak12 x y z) 78 (cond ((not (< y x)) z) 79 (else (tak13 (tak81 (- x 1) y z) 80 (tak43 (- y 1) z x) 81 (tak21 (- z 1) x y))))) 82 83 (define (tak13 x y z) 84 (cond ((not (< y x)) z) 85 (else (tak14 (tak18 (- x 1) y z) 86 (tak54 (- y 1) z x) 87 (tak38 (- z 1) x y))))) 88 (define (tak14 x y z) 89 (cond ((not (< y x)) z) 90 (else (tak15 (tak55 (- x 1) y z) 91 (tak65 (- y 1) z x) 92 (tak55 (- z 1) x y))))) 93 (define (tak15 x y z) 94 (cond ((not (< y x)) z) 95 (else (tak16 (tak92 (- x 1) y z) 96 (tak76 (- y 1) z x) 97 (tak72 (- z 1) x y))))) 98 (define (tak16 x y z) 99 (cond ((not (< y x)) z) 100 (else (tak17 (tak29 (- x 1) y z) 101 (tak87 (- y 1) z x) 102 (tak89 (- z 1) x y))))) 103 (define (tak17 x y z) 104 (cond ((not (< y x)) z) 105 (else (tak18 (tak66 (- x 1) y z) 106 (tak98 (- y 1) z x) 107 (tak6 (- z 1) x y))))) 108 (define (tak18 x y z) 109 (cond ((not (< y x)) z) 110 (else (tak19 (tak3 (- x 1) y z) 111 (tak9 (- y 1) z x) 112 (tak23 (- z 1) x y))))) 113 (define (tak19 x y z) 114 (cond ((not (< y x)) z) 115 (else (tak20 (tak40 (- x 1) y z) 116 (tak20 (- y 1) z x) 117 (tak40 (- z 1) x y))))) 118 (define (tak20 x y z) 119 (cond ((not (< y x)) z) 120 (else (tak21 (tak77 (- x 1) y z) 121 (tak31 (- y 1) z x) 122 (tak57 (- z 1) x y))))) 123 (define (tak21 x y z) 124 (cond ((not (< y x)) z) 125 (else (tak22 (tak14 (- x 1) y z) 126 (tak42 (- y 1) z x) 127 (tak74 (- z 1) x y))))) 128 (define (tak22 x y z) 129 (cond ((not (< y x)) z) 130 (else (tak23 (tak51 (- x 1) y z) 131 (tak53 (- y 1) z x) 132 (tak91 (- z 1) x y))))) 133 (define (tak23 x y z) 134 (cond ((not (< y x)) z) 135 (else (tak24 (tak88 (- x 1) y z) 136 (tak64 (- y 1) z x) 137 (tak8 (- z 1) x y))))) 138 (define (tak24 x y z) 139 (cond ((not (< y x)) z) 140 (else (tak25 (tak25 (- x 1) y z) 141 (tak75 (- y 1) z x) 142 (tak25 (- z 1) x y))))) 143 (define (tak25 x y z) 144 (cond ((not (< y x)) z) 145 (else (tak26 (tak62 (- x 1) y z) 146 (tak86 (- y 1) z x) 147 (tak42 (- z 1) x y))))) 148 (define (tak26 x y z) 149 (cond ((not (< y x)) z) 150 (else (tak27 (tak99 (- x 1) y z) 151 (tak97 (- y 1) z x) 152 (tak59 (- z 1) x y))))) 153 (define (tak27 x y z) 154 (cond ((not (< y x)) z) 155 (else (tak28 (tak36 (- x 1) y z) 156 (tak8 (- y 1) z x) 157 (tak76 (- z 1) x y))))) 158 (define (tak28 x y z) 159 (cond ((not (< y x)) z) 160 (else (tak29 (tak73 (- x 1) y z) 161 (tak19 (- y 1) z x) 162 (tak93 (- z 1) x y))))) 163 (define (tak29 x y z) 164 (cond ((not (< y x)) z) 165 (else (tak30 (tak10 (- x 1) y z) 166 (tak30 (- y 1) z x) 167 (tak10 (- z 1) x y))))) 168 (define (tak30 x y z) 169 (cond ((not (< y x)) z) 170 (else (tak31 (tak47 (- x 1) y z) 171 (tak41 (- y 1) z x) 172 (tak27 (- z 1) x y))))) 173 (define (tak31 x y z) 174 (cond ((not (< y x)) z) 175 (else (tak32 (tak84 (- x 1) y z) 176 (tak52 (- y 1) z x) 177 (tak44 (- z 1) x y))))) 178 (define (tak32 x y z) 179 (cond ((not (< y x)) z) 180 (else (tak33 (tak21 (- x 1) y z) 181 (tak63 (- y 1) z x) 182 (tak61 (- z 1) x y))))) 183 (define (tak33 x y z) 184 (cond ((not (< y x)) z) 185 (else (tak34 (tak58 (- x 1) y z) 186 (tak74 (- y 1) z x) 187 (tak78 (- z 1) x y))))) 188 (define (tak34 x y z) 189 (cond ((not (< y x)) z) 190 (else (tak35 (tak95 (- x 1) y z) 191 (tak85 (- y 1) z x) 192 (tak95 (- z 1) x y))))) 193 (define (tak35 x y z) 194 (cond ((not (< y x)) z) 195 (else (tak36 (tak32 (- x 1) y z) 196 (tak96 (- y 1) z x) 197 (tak12 (- z 1) x y))))) 198 (define (tak36 x y z) 199 (cond ((not (< y x)) z) 200 (else (tak37 (tak69 (- x 1) y z) 201 (tak7 (- y 1) z x) 202 (tak29 (- z 1) x y))))) 203 (define (tak37 x y z) 204 (cond ((not (< y x)) z) 205 (else (tak38 (tak6 (- x 1) y z) 206 (tak18 (- y 1) z x) 207 (tak46 (- z 1) x y))))) 208 (define (tak38 x y z) 209 (cond ((not (< y x)) z) 210 (else (tak39 (tak43 (- x 1) y z) 211 (tak29 (- y 1) z x) 212 (tak63 (- z 1) x y))))) 213 (define (tak39 x y z) 214 (cond ((not (< y x)) z) 215 (else (tak40 (tak80 (- x 1) y z) 216 (tak40 (- y 1) z x) 217 (tak80 (- z 1) x y))))) 218 (define (tak40 x y z) 219 (cond ((not (< y x)) z) 220 (else (tak41 (tak17 (- x 1) y z) 221 (tak51 (- y 1) z x) 222 (tak97 (- z 1) x y))))) 223 (define (tak41 x y z) 224 (cond ((not (< y x)) z) 225 (else (tak42 (tak54 (- x 1) y z) 226 (tak62 (- y 1) z x) 227 (tak14 (- z 1) x y))))) 228 (define (tak42 x y z) 229 (cond ((not (< y x)) z) 230 (else (tak43 (tak91 (- x 1) y z) 231 (tak73 (- y 1) z x) 232 (tak31 (- z 1) x y))))) 233 (define (tak43 x y z) 234 (cond ((not (< y x)) z) 235 (else (tak44 (tak28 (- x 1) y z) 236 (tak84 (- y 1) z x) 237 (tak48 (- z 1) x y))))) 238 (define (tak44 x y z) 239 (cond ((not (< y x)) z) 240 (else (tak45 (tak65 (- x 1) y z) 241 (tak95 (- y 1) z x) 242 (tak65 (- z 1) x y))))) 243 (define (tak45 x y z) 244 (cond ((not (< y x)) z) 245 (else (tak46 (tak2 (- x 1) y z) 246 (tak6 (- y 1) z x) 247 (tak82 (- z 1) x y))))) 248 (define (tak46 x y z) 249 (cond ((not (< y x)) z) 250 (else (tak47 (tak39 (- x 1) y z) 251 (tak17 (- y 1) z x) 252 (tak99 (- z 1) x y))))) 253 (define (tak47 x y z) 254 (cond ((not (< y x)) z) 255 (else (tak48 (tak76 (- x 1) y z) 256 (tak28 (- y 1) z x) 257 (tak16 (- z 1) x y))))) 258 (define (tak48 x y z) 259 (cond ((not (< y x)) z) 260 (else (tak49 (tak13 (- x 1) y z) 261 (tak39 (- y 1) z x) 262 (tak33 (- z 1) x y))))) 263 (define (tak49 x y z) 264 (cond ((not (< y x)) z) 265 (else (tak50 (tak50 (- x 1) y z) 266 (tak50 (- y 1) z x) 267 (tak50 (- z 1) x y))))) 268 (define (tak50 x y z) 269 (cond ((not (< y x)) z) 270 (else (tak51 (tak87 (- x 1) y z) 271 (tak61 (- y 1) z x) 272 (tak67 (- z 1) x y))))) 273 (define (tak51 x y z) 274 (cond ((not (< y x)) z) 275 (else (tak52 (tak24 (- x 1) y z) 276 (tak72 (- y 1) z x) 277 (tak84 (- z 1) x y))))) 278 (define (tak52 x y z) 279 (cond ((not (< y x)) z) 280 (else (tak53 (tak61 (- x 1) y z) 281 (tak83 (- y 1) z x) 282 (tak1 (- z 1) x y))))) 283 (define (tak53 x y z) 284 (cond ((not (< y x)) z) 285 (else (tak54 (tak98 (- x 1) y z) 286 (tak94 (- y 1) z x) 287 (tak18 (- z 1) x y))))) 288 (define (tak54 x y z) 289 (cond ((not (< y x)) z) 290 (else (tak55 (tak35 (- x 1) y z) 291 (tak5 (- y 1) z x) 292 (tak35 (- z 1) x y))))) 293 (define (tak55 x y z) 294 (cond ((not (< y x)) z) 295 (else (tak56 (tak72 (- x 1) y z) 296 (tak16 (- y 1) z x) 297 (tak52 (- z 1) x y))))) 298 (define (tak56 x y z) 299 (cond ((not (< y x)) z) 300 (else (tak57 (tak9 (- x 1) y z) 301 (tak27 (- y 1) z x) 302 (tak69 (- z 1) x y))))) 303 (define (tak57 x y z) 304 (cond ((not (< y x)) z) 305 (else (tak58 (tak46 (- x 1) y z) 306 (tak38 (- y 1) z x) 307 (tak86 (- z 1) x y))))) 308 (define (tak58 x y z) 309 (cond ((not (< y x)) z) 310 (else (tak59 (tak83 (- x 1) y z) 311 (tak49 (- y 1) z x) 312 (tak3 (- z 1) x y))))) 313 (define (tak59 x y z) 314 (cond ((not (< y x)) z) 315 (else (tak60 (tak20 (- x 1) y z) 316 (tak60 (- y 1) z x) 317 (tak20 (- z 1) x y))))) 318 (define (tak60 x y z) 319 (cond ((not (< y x)) z) 320 (else (tak61 (tak57 (- x 1) y z) 321 (tak71 (- y 1) z x) 322 (tak37 (- z 1) x y))))) 323 (define (tak61 x y z) 324 (cond ((not (< y x)) z) 325 (else (tak62 (tak94 (- x 1) y z) 326 (tak82 (- y 1) z x) 327 (tak54 (- z 1) x y))))) 328 (define (tak62 x y z) 329 (cond ((not (< y x)) z) 330 (else (tak63 (tak31 (- x 1) y z) 331 (tak93 (- y 1) z x) 332 (tak71 (- z 1) x y))))) 333 (define (tak63 x y z) 334 (cond ((not (< y x)) z) 335 (else (tak64 (tak68 (- x 1) y z) 336 (tak4 (- y 1) z x) 337 (tak88 (- z 1) x y))))) 338 (define (tak64 x y z) 339 (cond ((not (< y x)) z) 340 (else (tak65 (tak5 (- x 1) y z) 341 (tak15 (- y 1) z x) 342 (tak5 (- z 1) x y))))) 343 (define (tak65 x y z) 344 (cond ((not (< y x)) z) 345 (else (tak66 (tak42 (- x 1) y z) 346 (tak26 (- y 1) z x) 347 (tak22 (- z 1) x y))))) 348 (define (tak66 x y z) 349 (cond ((not (< y x)) z) 350 (else (tak67 (tak79 (- x 1) y z) 351 (tak37 (- y 1) z x) 352 (tak39 (- z 1) x y))))) 353 (define (tak67 x y z) 354 (cond ((not (< y x)) z) 355 (else (tak68 (tak16 (- x 1) y z) 356 (tak48 (- y 1) z x) 357 (tak56 (- z 1) x y))))) 358 (define (tak68 x y z) 359 (cond ((not (< y x)) z) 360 (else (tak69 (tak53 (- x 1) y z) 361 (tak59 (- y 1) z x) 362 (tak73 (- z 1) x y))))) 363 (define (tak69 x y z) 364 (cond ((not (< y x)) z) 365 (else (tak70 (tak90 (- x 1) y z) 366 (tak70 (- y 1) z x) 367 (tak90 (- z 1) x y))))) 368 (define (tak70 x y z) 369 (cond ((not (< y x)) z) 370 (else (tak71 (tak27 (- x 1) y z) 371 (tak81 (- y 1) z x) 372 (tak7 (- z 1) x y))))) 373 (define (tak71 x y z) 374 (cond ((not (< y x)) z) 375 (else (tak72 (tak64 (- x 1) y z) 376 (tak92 (- y 1) z x) 377 (tak24 (- z 1) x y))))) 378 (define (tak72 x y z) 379 (cond ((not (< y x)) z) 380 (else (tak73 (tak1 (- x 1) y z) 381 (tak3 (- y 1) z x) 382 (tak41 (- z 1) x y))))) 383 (define (tak73 x y z) 384 (cond ((not (< y x)) z) 385 (else (tak74 (tak38 (- x 1) y z) 386 (tak14 (- y 1) z x) 387 (tak58 (- z 1) x y))))) 388 (define (tak74 x y z) 389 (cond ((not (< y x)) z) 390 (else (tak75 (tak75 (- x 1) y z) 391 (tak25 (- y 1) z x) 392 (tak75 (- z 1) x y))))) 393 (define (tak75 x y z) 394 (cond ((not (< y x)) z) 395 (else (tak76 (tak12 (- x 1) y z) 396 (tak36 (- y 1) z x) 397 (tak92 (- z 1) x y))))) 398 (define (tak76 x y z) 399 (cond ((not (< y x)) z) 400 (else (tak77 (tak49 (- x 1) y z) 401 (tak47 (- y 1) z x) 402 (tak9 (- z 1) x y))))) 403 (define (tak77 x y z) 404 (cond ((not (< y x)) z) 405 (else (tak78 (tak86 (- x 1) y z) 406 (tak58 (- y 1) z x) 407 (tak26 (- z 1) x y))))) 408 (define (tak78 x y z) 409 (cond ((not (< y x)) z) 410 (else (tak79 (tak23 (- x 1) y z) 411 (tak69 (- y 1) z x) 412 (tak43 (- z 1) x y))))) 413 (define (tak79 x y z) 414 (cond ((not (< y x)) z) 415 (else (tak80 (tak60 (- x 1) y z) 416 (tak80 (- y 1) z x) 417 (tak60 (- z 1) x y))))) 418 (define (tak80 x y z) 419 (cond ((not (< y x)) z) 420 (else (tak81 (tak97 (- x 1) y z) 421 (tak91 (- y 1) z x) 422 (tak77 (- z 1) x y))))) 423 (define (tak81 x y z) 424 (cond ((not (< y x)) z) 425 (else (tak82 (tak34 (- x 1) y z) 426 (tak2 (- y 1) z x) 427 (tak94 (- z 1) x y))))) 428 (define (tak82 x y z) 429 (cond ((not (< y x)) z) 430 (else (tak83 (tak71 (- x 1) y z) 431 (tak13 (- y 1) z x) 432 (tak11 (- z 1) x y))))) 433 (define (tak83 x y z) 434 (cond ((not (< y x)) z) 435 (else (tak84 (tak8 (- x 1) y z) 436 (tak24 (- y 1) z x) 437 (tak28 (- z 1) x y))))) 438 (define (tak84 x y z) 439 (cond ((not (< y x)) z) 440 (else (tak85 (tak45 (- x 1) y z) 441 (tak35 (- y 1) z x) 442 (tak45 (- z 1) x y))))) 443 (define (tak85 x y z) 444 (cond ((not (< y x)) z) 445 (else (tak86 (tak82 (- x 1) y z) 446 (tak46 (- y 1) z x) 447 (tak62 (- z 1) x y))))) 448 (define (tak86 x y z) 449 (cond ((not (< y x)) z) 450 (else (tak87 (tak19 (- x 1) y z) 451 (tak57 (- y 1) z x) 452 (tak79 (- z 1) x y))))) 453 (define (tak87 x y z) 454 (cond ((not (< y x)) z) 455 (else (tak88 (tak56 (- x 1) y z) 456 (tak68 (- y 1) z x) 457 (tak96 (- z 1) x y))))) 458 (define (tak88 x y z) 459 (cond ((not (< y x)) z) 460 (else (tak89 (tak93 (- x 1) y z) 461 (tak79 (- y 1) z x) 462 (tak13 (- z 1) x y))))) 463 (define (tak89 x y z) 464 (cond ((not (< y x)) z) 465 (else (tak90 (tak30 (- x 1) y z) 466 (tak90 (- y 1) z x) 467 (tak30 (- z 1) x y))))) 468 (define (tak90 x y z) 469 (cond ((not (< y x)) z) 470 (else (tak91 (tak67 (- x 1) y z) 471 (tak1 (- y 1) z x) 472 (tak47 (- z 1) x y))))) 473 (define (tak91 x y z) 474 (cond ((not (< y x)) z) 475 (else (tak92 (tak4 (- x 1) y z) 476 (tak12 (- y 1) z x) 477 (tak64 (- z 1) x y))))) 478 (define (tak92 x y z) 479 (cond ((not (< y x)) z) 480 (else (tak93 (tak41 (- x 1) y z) 481 (tak23 (- y 1) z x) 482 (tak81 (- z 1) x y))))) 483 (define (tak93 x y z) 484 (cond ((not (< y x)) z) 485 (else (tak94 (tak78 (- x 1) y z) 486 (tak34 (- y 1) z x) 487 (tak98 (- z 1) x y))))) 488 (define (tak94 x y z) 489 (cond ((not (< y x)) z) 490 (else (tak95 (tak15 (- x 1) y z) 491 (tak45 (- y 1) z x) 492 (tak15 (- z 1) x y))))) 493 (define (tak95 x y z) 494 (cond ((not (< y x)) z) 495 (else (tak96 (tak52 (- x 1) y z) 496 (tak56 (- y 1) z x) 497 (tak32 (- z 1) x y))))) 498 (define (tak96 x y z) 499 (cond ((not (< y x)) z) 500 (else (tak97 (tak89 (- x 1) y z) 501 (tak67 (- y 1) z x) 502 (tak49 (- z 1) x y))))) 503 (define (tak97 x y z) 504 (cond ((not (< y x)) z) 505 (else (tak98 (tak26 (- x 1) y z) 506 (tak78 (- y 1) z x) 507 (tak66 (- z 1) x y))))) 508 (define (tak98 x y z) 509 (cond ((not (< y x)) z) 510 (else (tak99 (tak63 (- x 1) y z) 511 (tak89 (- y 1) z x) 512 (tak83 (- z 1) x y))))) 513 (define (tak99 x y z) 514 (cond ((not (< y x)) z) 515 (else (tak0 (tak0 (- x 1) y z) 516 (tak0 (- y 1) z x) 517 (tak0 (- z 1) x y))))) 518 519 (tak0 x y z)) 520 521;;; call: (tak0 18 12 6) 522 523(let ((input (with-input-from-file "input.txt" read))) 524 (time 525 (let loop ((n 500) (v 0)) 526 (if (zero? n) 527 v 528 (loop (- n 1) (tak 18 12 (if input 6 0))))))) 529