1 /* j/5/parse.c 2 ** 3 */ 4 #include "all.h" 5 6 7 static u3_noun _slip(u3_noun weq,u3_noun naz)8 _slip(u3_noun weq, 9 u3_noun naz) 10 { 11 u3_noun p_naz, q_naz; 12 13 u3x_cell(naz, &p_naz, &q_naz); 14 if ( 10 == weq ) { 15 return u3nc(u3x_good(u3i_vint(u3k(p_naz))), 16 1); 17 } else { 18 return u3nc(u3k(p_naz), 19 u3x_good(u3i_vint(u3k(q_naz)))); 20 } 21 } 22 23 static u3_noun _fail(u3_noun tub)24 _fail(u3_noun tub) 25 { 26 u3_noun p_tub, q_tub; 27 28 u3x_cell(tub, &p_tub, &q_tub); 29 return u3nc(u3k(p_tub), u3_nul); 30 } 31 32 static u3_noun _last(u3_noun zyc,u3_noun naz)33 _last(u3_noun zyc, 34 u3_noun naz) 35 { 36 u3_noun p_zyc, q_zyc, p_naz, q_naz; 37 38 u3x_cell(zyc, &p_zyc, &q_zyc); 39 u3x_cell(naz, &p_naz, &q_naz); 40 41 if ( !_(u3a_is_cat(p_zyc)) || !_(u3a_is_cat(q_zyc)) || 42 !_(u3a_is_cat(p_naz)) || !_(u3a_is_cat(q_naz)) ) 43 { 44 return u3m_bail(c3__fail); 45 } else { 46 if ( p_zyc == p_naz ) { 47 return (q_zyc > q_naz) ? u3k(zyc) : u3k(naz); 48 } 49 else { 50 return (p_zyc > p_naz) ? u3k(zyc) : u3k(naz); 51 } 52 } 53 } 54 55 static u3_noun _next(u3_noun tub)56 _next(u3_noun tub) 57 { 58 u3_noun p_tub, q_tub; 59 u3_noun zac; 60 61 u3x_cell(tub, &p_tub, &q_tub); 62 if ( c3n == u3du(q_tub) ) { 63 return _fail(tub); 64 } 65 else { 66 u3_noun iq_tub = u3h(q_tub); 67 u3_noun tq_tub = u3t(q_tub); 68 69 zac = _slip(iq_tub, p_tub); 70 71 return u3nc(zac, 72 u3nq(u3_nul, 73 u3k(iq_tub), 74 u3k(zac), 75 u3k(tq_tub))); 76 } 77 } 78 79 /* bend 80 */ 81 static u3_noun _cqe_bend_fun(u3_noun raq,u3_noun vex,u3_noun sab)82 _cqe_bend_fun(u3_noun raq, 83 u3_noun vex, 84 u3_noun sab) 85 { 86 u3_noun p_vex, q_vex; 87 88 u3x_cell(vex, &p_vex, &q_vex); 89 if ( c3n == u3du(q_vex) ) { 90 return u3k(vex); 91 } else { 92 u3_noun uq_vex = u3t(q_vex); 93 u3_noun puq_vex, quq_vex; 94 u3_noun yit, yur; 95 u3_noun p_yit, q_yit; 96 u3_noun ret; 97 98 u3x_cell(uq_vex, &puq_vex, &quq_vex); 99 yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); 100 101 u3x_cell(yit, &p_yit, &q_yit); 102 yur = _last(p_vex, p_yit); 103 104 if ( c3n == u3du(q_yit) ) { 105 ret = u3nc(yur, u3k(q_vex)); 106 } 107 else { 108 u3_noun uq_yit = u3t(q_yit); 109 u3_noun puq_yit, quq_yit; 110 u3_noun vux; 111 112 u3x_cell(uq_yit, &puq_yit, &quq_yit); 113 114 vux = u3x_good(u3n_slam_on(u3k(raq), 115 u3nc(u3k(puq_vex), 116 u3k(puq_yit)))); 117 if ( u3_nul == vux ) { 118 ret = u3nc(yur, u3k(q_vex)); 119 } 120 else { 121 ret = u3nq(yur, 122 u3_nul, 123 u3k(u3t(vux)), 124 u3k(quq_yit)); 125 u3z(vux); 126 } 127 } 128 u3z(yit); 129 return ret; 130 } 131 } 132 133 u3_noun u3we_bend_fun(u3_noun cor)134 u3we_bend_fun(u3_noun cor) 135 { 136 u3_noun van, raq, vex, sab; 137 138 if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, 139 u3x_sam_3, &sab, 140 u3x_con, &van, 0)) || 141 (u3_none == (raq = u3r_at(u3x_sam, van))) ) 142 { 143 return u3m_bail(c3__fail); 144 } else { 145 return _cqe_bend_fun(raq, vex, sab); 146 } 147 } 148 149 /* cold 150 */ 151 static u3_noun _cqe_cold_fun(u3_noun cus,u3_noun sef,u3_noun tub)152 _cqe_cold_fun(u3_noun cus, 153 u3_noun sef, 154 u3_noun tub) 155 { 156 u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub))); 157 u3_noun p_vex, q_vex; 158 159 u3x_cell(vex, &p_vex, &q_vex); 160 161 if ( c3n == u3du(q_vex) ) { 162 return vex; 163 } 164 else { 165 u3_noun uq_vex = u3t(q_vex); 166 u3_noun quq_vex; 167 u3_noun ret; 168 169 u3x_cell(uq_vex, 0, &quq_vex); 170 ret = u3nq(u3k(p_vex), 171 u3_nul, 172 u3k(cus), 173 u3k(quq_vex)); 174 175 u3z(vex); 176 return ret; 177 } 178 } 179 180 u3_noun u3we_cold_fun(u3_noun cor)181 u3we_cold_fun(u3_noun cor) 182 { 183 u3_noun van, cus, sef, tub; 184 185 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 186 (c3n == u3r_mean(van, u3x_sam_2, &cus, u3x_sam_3, &sef, 0)) ) 187 { 188 return u3m_bail(c3__fail); 189 } else { 190 return _cqe_cold_fun(cus, sef, tub); 191 } 192 } 193 194 /* cook 195 */ 196 static u3_noun _cqe_cook_fun(u3_noun poq,u3_noun sef,u3_noun tub)197 _cqe_cook_fun(u3_noun poq, 198 u3_noun sef, 199 u3_noun tub) 200 { 201 u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub))); 202 u3_noun p_vex, q_vex; 203 204 u3x_cell(vex, &p_vex, &q_vex); 205 206 if ( c3n == u3du(q_vex) ) { 207 return vex; 208 } 209 else { 210 u3_noun uq_vex = u3t(q_vex); 211 u3_noun puq_vex, quq_vex; 212 u3_noun wag; 213 u3_noun ret; 214 215 u3x_cell(uq_vex, &puq_vex, &quq_vex); 216 wag = u3x_good(u3n_slam_on(u3k(poq), u3k(puq_vex))); 217 ret = u3nq(u3k(p_vex), 218 u3_nul, 219 wag, 220 u3k(quq_vex)); 221 222 u3z(vex); 223 return ret; 224 } 225 } 226 227 u3_noun u3we_cook_fun(u3_noun cor)228 u3we_cook_fun(u3_noun cor) 229 { 230 u3_noun van, poq, sef, tub; 231 232 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 233 (c3n == u3r_mean(van, u3x_sam_2, &poq, u3x_sam_3, &sef, 0)) ) 234 { 235 return u3m_bail(c3__fail); 236 } else { 237 return _cqe_cook_fun(poq, sef, tub); 238 } 239 } 240 241 /* comp 242 */ 243 static u3_noun _cqe_comp_fun(u3_noun raq,u3_noun vex,u3_noun sab)244 _cqe_comp_fun(u3_noun raq, 245 u3_noun vex, 246 u3_noun sab) 247 { 248 u3_noun p_vex, q_vex; 249 250 u3x_cell(vex, &p_vex, &q_vex); 251 if ( c3n == u3du(q_vex) ) { 252 return u3k(vex); 253 } else { 254 u3_noun uq_vex = u3t(q_vex); 255 u3_noun puq_vex, quq_vex; 256 u3_noun yit, yur; 257 u3_noun p_yit, q_yit; 258 u3_noun ret; 259 260 u3x_cell(uq_vex, &puq_vex, &quq_vex); 261 yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); 262 263 u3x_cell(yit, &p_yit, &q_yit); 264 yur = _last(p_vex, p_yit); 265 266 if ( c3n == u3du(q_yit) ) { 267 ret = u3nc(yur, u3k(q_yit)); 268 } 269 else { 270 u3_noun uq_yit = u3t(q_yit); 271 u3_noun puq_yit, quq_yit; 272 273 u3x_cell(uq_yit, &puq_yit, &quq_yit); 274 ret = u3nq(yur, 275 u3_nul, 276 u3x_good(u3n_slam_on(u3k(raq), 277 u3nc(u3k(puq_vex), 278 u3k(puq_yit)))), 279 u3k(quq_yit)); 280 } 281 u3z(yit); 282 return ret; 283 } 284 } 285 286 u3_noun u3we_comp_fun(u3_noun cor)287 u3we_comp_fun(u3_noun cor) 288 { 289 u3_noun van, raq, vex, sab; 290 291 if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, 292 u3x_sam_3, &sab, 293 u3x_con, &van, 0)) || 294 (u3_none == (raq = u3r_at(u3x_sam, van))) ) 295 { 296 return u3m_bail(c3__fail); 297 } else { 298 return _cqe_comp_fun(raq, vex, sab); 299 } 300 } 301 302 /* easy 303 */ 304 static u3_noun _cqe_easy_fun(u3_noun huf,u3_noun tub)305 _cqe_easy_fun(u3_noun huf, 306 u3_noun tub) 307 { 308 u3_noun p_tub, q_tub; 309 310 u3x_cell(tub, &p_tub, &q_tub); 311 return u3nq(u3k(p_tub), 312 u3_nul, 313 u3k(huf), 314 u3k(tub)); 315 } 316 317 u3_noun u3we_easy_fun(u3_noun cor)318 u3we_easy_fun(u3_noun cor) 319 { 320 u3_noun van, huf, tub; 321 322 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 323 (u3_none == (huf = u3r_at(u3x_sam, van))) ) 324 { 325 return u3m_bail(c3__fail); 326 } else { 327 return _cqe_easy_fun(huf, tub); 328 } 329 } 330 331 /* glue 332 */ 333 static u3_noun _cqe_glue_fun(u3_noun bus,u3_noun vex,u3_noun sab)334 _cqe_glue_fun(u3_noun bus, 335 u3_noun vex, 336 u3_noun sab) 337 { 338 u3_noun p_vex, q_vex; 339 340 u3x_cell(vex, &p_vex, &q_vex); 341 if ( c3n == u3du(q_vex) ) { 342 return u3k(vex); 343 } 344 else { 345 u3_noun uq_vex = u3t(q_vex); 346 u3_noun puq_vex, quq_vex; 347 u3_noun yit, yur; 348 u3_noun p_yit, q_yit; 349 u3_noun ret; 350 351 u3x_cell(uq_vex, &puq_vex, &quq_vex); 352 yit = u3x_good(u3n_slam_on(u3k(bus), u3k(quq_vex))); 353 354 u3x_cell(yit, &p_yit, &q_yit); 355 yur = _last(p_vex, p_yit); 356 357 if ( c3n == u3du(q_yit) ) { 358 ret = u3nc(yur, u3_nul); 359 } 360 else { 361 u3_noun uq_yit = u3t(q_yit); 362 u3_noun puq_yit, quq_yit; 363 u3_noun wam, p_wam, q_wam, goy; 364 365 u3x_cell(uq_yit, &puq_yit, &quq_yit); 366 wam = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_yit))); 367 368 u3x_cell(wam, &p_wam, &q_wam); 369 goy = _last(yur, p_wam); 370 u3z(yur); 371 372 if ( c3n == u3du(q_wam) ) { 373 ret = u3nc(goy, u3_nul); 374 } else { 375 u3_noun uq_wam = u3t(q_wam); 376 u3_noun puq_wam, quq_wam; 377 378 u3x_cell(uq_wam, &puq_wam, &quq_wam); 379 ret = u3nq(goy, 380 u3_nul, 381 u3nc(u3k(puq_vex), 382 u3k(puq_wam)), 383 u3k(quq_wam)); 384 } 385 u3z(wam); 386 } 387 u3z(yit); 388 return ret; 389 } 390 } 391 392 u3_noun u3we_glue_fun(u3_noun cor)393 u3we_glue_fun(u3_noun cor) 394 { 395 u3_noun van, bus, vex, sab; 396 397 if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, 398 u3x_sam_3, &sab, 399 u3x_con, &van, 0)) || 400 (u3_none == (bus = u3r_at(u3x_sam, van))) ) 401 { 402 return u3m_bail(c3__fail); 403 } else { 404 return _cqe_glue_fun(bus, vex, sab); 405 } 406 } 407 408 /* here 409 */ 410 static u3_noun _cqe_here_fun(u3_noun hez,u3_noun sef,u3_noun tub)411 _cqe_here_fun(u3_noun hez, 412 u3_noun sef, 413 u3_noun tub) 414 { 415 u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub))); 416 u3_noun p_vex, q_vex; 417 418 u3x_cell(vex, &p_vex, &q_vex); 419 420 if ( c3n == u3du(q_vex) ) { 421 return vex; 422 } 423 else { 424 u3_noun uq_vex = u3t(q_vex); 425 u3_noun p_tub, q_tub; 426 u3_noun puq_vex, quq_vex, pquq_vex; 427 u3_noun gud, wag; 428 u3_noun ret; 429 430 u3x_cell(tub, &p_tub, &q_tub); 431 u3x_cell(uq_vex, &puq_vex, &quq_vex); 432 u3x_cell(quq_vex, &pquq_vex, 0); 433 gud = u3nc( 434 u3nc(u3k(p_tub), 435 u3k(pquq_vex)), 436 u3k(puq_vex)); 437 438 wag = u3x_good(u3n_slam_on(u3k(hez), gud)); 439 ret = u3nq(u3k(p_vex), 440 u3_nul, 441 wag, 442 u3k(quq_vex)); 443 444 u3z(vex); 445 return ret; 446 } 447 } 448 449 u3_noun u3we_here_fun(u3_noun cor)450 u3we_here_fun(u3_noun cor) 451 { 452 u3_noun van, hez, sef, tub; 453 454 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 455 (c3n == u3r_mean(van, u3x_sam_2, &hez, u3x_sam_3, &sef, 0)) ) 456 { 457 return u3m_bail(c3__fail); 458 } 459 else { 460 return _cqe_here_fun(hez, sef, tub); 461 } 462 } 463 464 /* just 465 */ 466 static u3_noun _cqe_just_fun(u3_noun daf,u3_noun tub)467 _cqe_just_fun(u3_noun daf, 468 u3_noun tub) 469 { 470 u3_noun p_tub, q_tub; 471 472 u3x_cell(tub, &p_tub, &q_tub); 473 474 if ( c3n == u3du(q_tub) ) { 475 return _fail(tub); 476 } 477 else { 478 u3_noun iq_tub = u3h(q_tub); 479 480 if ( c3y == u3r_sing(daf, iq_tub) ) { 481 return _next(tub); 482 } 483 else return _fail(tub); 484 } 485 } 486 u3_noun u3we_just_fun(u3_noun cor)487 u3we_just_fun(u3_noun cor) 488 { 489 u3_noun van, daf, tub; 490 491 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 492 (u3_none == (daf = u3r_at(u3x_sam, van))) ) 493 { 494 return u3m_bail(c3__fail); 495 } else { 496 return _cqe_just_fun(daf, tub); 497 } 498 } 499 500 /* mask 501 */ 502 static u3_noun _cqe_mask_fun(u3_noun bud,u3_noun tub)503 _cqe_mask_fun(u3_noun bud, 504 u3_noun tub) 505 { 506 u3_noun p_tub, q_tub; 507 508 u3x_cell(tub, &p_tub, &q_tub); 509 510 if ( c3n == u3du(q_tub) ) { 511 return _fail(tub); 512 } 513 else { 514 u3_noun iq_tub = u3h(q_tub); 515 516 while ( c3y == u3du(bud) ) { 517 if ( c3y == u3r_sing(u3h(bud), iq_tub) ) { 518 return _next(tub); 519 } 520 bud = u3t(bud); 521 } 522 return _fail(tub); 523 } 524 } 525 u3_noun u3we_mask_fun(u3_noun cor)526 u3we_mask_fun(u3_noun cor) 527 { 528 u3_noun van, bud, tub; 529 530 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 531 (u3_none == (bud = u3r_at(u3x_sam, van))) ) 532 { 533 return u3m_bail(c3__fail); 534 } else { 535 return _cqe_mask_fun(bud, tub); 536 } 537 } 538 /* pfix 539 */ 540 static u3_noun _cqe_pfix(u3_noun vex,u3_noun sab)541 _cqe_pfix(u3_noun vex, 542 u3_noun sab) 543 { 544 u3_noun p_vex, q_vex; 545 546 u3x_cell(vex, &p_vex, &q_vex); 547 if ( c3n == u3du(q_vex) ) { 548 return u3k(vex); 549 } 550 else { 551 u3_noun uq_vex = u3t(q_vex); 552 u3_noun puq_vex, quq_vex; 553 u3_noun yit, p_yit, q_yit; 554 u3_noun ret; 555 556 u3x_cell(uq_vex, &puq_vex, &quq_vex); 557 yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); 558 559 u3x_cell(yit, &p_yit, &q_yit); 560 ret = u3nc(_last(p_vex, p_yit), 561 u3k(q_yit)); 562 563 u3z(yit); 564 return ret; 565 } 566 } 567 u3_noun u3we_pfix(u3_noun cor)568 u3we_pfix(u3_noun cor) 569 { 570 u3_noun vex, sab; 571 572 if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) { 573 return u3m_bail(c3__exit); 574 } else { 575 return _cqe_pfix(vex, sab); 576 } 577 } 578 579 /* plug 580 */ 581 static u3_noun _cqe_plug(u3_noun vex,u3_noun sab)582 _cqe_plug(u3_noun vex, 583 u3_noun sab) 584 { 585 u3_noun p_vex, q_vex; 586 587 u3x_cell(vex, &p_vex, &q_vex); 588 if ( c3n == u3du(q_vex) ) { 589 return u3k(vex); 590 } 591 else { 592 u3_noun uq_vex = u3t(q_vex); 593 u3_noun puq_vex, quq_vex; 594 u3_noun yit, yur; 595 u3_noun p_yit, q_yit; 596 u3_noun ret; 597 598 u3x_cell(uq_vex, &puq_vex, &quq_vex); 599 yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); 600 601 u3x_cell(yit, &p_yit, &q_yit); 602 yur = _last(p_vex, p_yit); 603 604 if ( c3n == u3du(q_yit) ) { 605 ret = u3nc(yur, u3k(q_yit)); 606 } 607 else { 608 u3_noun uq_yit = u3t(q_yit); 609 u3_noun puq_yit, quq_yit; 610 611 u3x_cell(uq_yit, &puq_yit, &quq_yit); 612 ret = u3nq(yur, 613 u3_nul, 614 u3nc(u3k(puq_vex), 615 u3k(puq_yit)), 616 u3k(quq_yit)); 617 } 618 u3z(yit); 619 return ret; 620 } 621 } 622 u3_noun u3we_plug(u3_noun cor)623 u3we_plug(u3_noun cor) 624 { 625 u3_noun vex, sab; 626 627 if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) { 628 return u3m_bail(c3__exit); 629 } else { 630 return _cqe_plug(vex, sab); 631 } 632 } 633 634 /* pose 635 */ 636 u3_noun u3qe_pose(u3_noun vex,u3_noun sab)637 u3qe_pose(u3_noun vex, 638 u3_noun sab) 639 { 640 u3_noun p_vex, q_vex; 641 642 u3x_cell(vex, &p_vex, &q_vex); 643 if ( c3y == u3du(q_vex) ) { 644 return u3k(vex); 645 } else { 646 u3_noun roq = u3x_good(u3n_kick_on(u3k(sab))); 647 u3_noun p_roq, q_roq; 648 u3_noun ret; 649 650 u3x_cell(roq, &p_roq, &q_roq); 651 ret = u3nc(_last(p_vex, p_roq), 652 u3k(q_roq)); 653 654 u3z(roq); 655 return ret; 656 } 657 } 658 u3_noun u3we_pose(u3_noun cor)659 u3we_pose(u3_noun cor) 660 { 661 u3_noun vex, sab; 662 663 if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) { 664 return u3m_bail(c3__exit); 665 } else { 666 return u3qe_pose(vex, sab); 667 } 668 } 669 670 /* sfix 671 */ 672 static u3_noun _cqe_sfix(u3_noun vex,u3_noun sab)673 _cqe_sfix(u3_noun vex, 674 u3_noun sab) 675 { 676 u3_noun p_vex, q_vex; 677 678 u3x_cell(vex, &p_vex, &q_vex); 679 if ( c3n == u3du(q_vex) ) { 680 return u3k(vex); 681 } 682 else { 683 u3_noun uq_vex = u3t(q_vex); 684 u3_noun puq_vex, quq_vex; 685 u3_noun yit, p_yit, q_yit, yur; 686 u3_noun ret; 687 688 u3x_cell(uq_vex, &puq_vex, &quq_vex); 689 yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); 690 691 u3x_cell(yit, &p_yit, &q_yit); 692 yur = _last(p_vex, p_yit); 693 694 if ( c3n == u3du(q_yit) ) { 695 ret = u3nc(yur, u3_nul); 696 } 697 else { 698 u3_noun uq_yit = u3t(q_yit); 699 u3_noun puq_yit, quq_yit; 700 701 u3x_cell(uq_yit, &puq_yit, &quq_yit); 702 703 ret = u3nq(yur, 704 u3_nul, 705 u3k(puq_vex), 706 u3k(quq_yit)); 707 } 708 u3z(yit); 709 return ret; 710 } 711 } 712 u3_noun u3we_sfix(u3_noun cor)713 u3we_sfix(u3_noun cor) 714 { 715 u3_noun vex, sab; 716 717 if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) { 718 return u3m_bail(c3__exit); 719 } else { 720 return _cqe_sfix(vex, sab); 721 } 722 } 723 724 /* shim 725 */ 726 static u3_noun _cqe_shim_fun(u3_noun zep,u3_noun tub)727 _cqe_shim_fun(u3_noun zep, 728 u3_noun tub) 729 { 730 u3_noun p_tub, q_tub; 731 732 u3x_cell(tub, &p_tub, &q_tub); 733 734 if ( c3n == u3du(q_tub) ) { 735 return _fail(tub); 736 } 737 else { 738 u3_noun p_zep, q_zep; 739 u3_noun iq_tub = u3h(q_tub); 740 741 u3x_cell(zep, &p_zep, &q_zep); 742 if ( _(u3a_is_cat(p_zep)) && 743 _(u3a_is_cat(q_zep)) && 744 _(u3a_is_cat(iq_tub)) ) 745 { 746 if ( (iq_tub >= p_zep) && (iq_tub <= q_zep) ) { 747 return _next(tub); 748 } 749 else return _fail(tub); 750 } 751 else { 752 return u3m_bail(c3__fail); 753 } 754 } 755 } 756 u3_noun u3we_shim_fun(u3_noun cor)757 u3we_shim_fun(u3_noun cor) 758 { 759 u3_noun van, zep, tub; 760 761 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 762 (u3_none == (zep = u3r_at(u3x_sam, van))) ) 763 { 764 return u3m_bail(c3__fail); 765 } else { 766 return _cqe_shim_fun(zep, tub); 767 } 768 } 769 770 /* stag 771 */ 772 static u3_noun _cqe_stag_fun(u3_noun gob,u3_noun sef,u3_noun tub)773 _cqe_stag_fun(u3_noun gob, 774 u3_noun sef, 775 u3_noun tub) 776 { 777 u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub))); 778 u3_noun p_vex, q_vex; 779 780 u3x_cell(vex, &p_vex, &q_vex); 781 782 if ( c3n == u3du(q_vex) ) { 783 return vex; 784 } 785 else { 786 u3_noun uq_vex = u3t(q_vex); 787 u3_noun puq_vex, quq_vex; 788 u3_noun wag; 789 u3_noun ret; 790 791 u3x_cell(uq_vex, &puq_vex, &quq_vex); 792 wag = u3nc(u3k(gob), u3k(puq_vex)); 793 ret = u3nq(u3k(p_vex), 794 u3_nul, 795 wag, 796 u3k(quq_vex)); 797 798 u3z(vex); 799 return ret; 800 } 801 } 802 803 u3_noun u3we_stag_fun(u3_noun cor)804 u3we_stag_fun(u3_noun cor) 805 { 806 u3_noun van, gob, sef, tub; 807 808 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 809 (c3n == u3r_mean(van, u3x_sam_2, &gob, u3x_sam_3, &sef, 0)) ) 810 { 811 return u3m_bail(c3__fail); 812 } else { 813 return _cqe_stag_fun(gob, sef, tub); 814 } 815 } 816 817 /* stew 818 */ 819 static u3_noun _stew_wor(u3_noun ort,u3_noun wan)820 _stew_wor(u3_noun ort, 821 u3_noun wan) 822 { 823 if ( !_(u3a_is_cat(ort)) ) { 824 return u3m_bail(c3__fail); 825 } 826 else { 827 if ( c3n == u3du(wan) ) { 828 if ( !_(u3a_is_cat(wan)) ) { 829 return u3m_bail(c3__fail); 830 } 831 else return (ort < wan) ? c3y : c3n; 832 } 833 else { 834 u3_noun h_wan = u3h(wan); 835 836 if ( !_(u3a_is_cat(h_wan)) ) { 837 return u3m_bail(c3__fail); 838 } 839 else return (ort < h_wan) ? c3y : c3n; 840 } 841 } 842 } 843 844 static u3_noun _cqe_stew_fun(u3_noun hel,u3_noun tub)845 _cqe_stew_fun(u3_noun hel, 846 u3_noun tub) 847 { 848 u3_noun p_tub, q_tub; 849 850 u3x_cell(tub, &p_tub, &q_tub); 851 if ( c3n == u3du(q_tub) ) { 852 return _fail(tub); 853 } 854 else { 855 u3_noun iq_tub = u3h(q_tub); 856 857 if ( !_(u3a_is_cat(iq_tub)) ) { 858 return u3m_bail(c3__fail); 859 } 860 else while ( 1 ) { 861 if ( c3n == u3du(hel) ) { 862 return _fail(tub); 863 } 864 else { 865 u3_noun n_hel, l_hel, r_hel; 866 u3_noun pn_hel, qn_hel; 867 c3_o bit_o; 868 869 u3x_trel(hel, &n_hel, &l_hel, &r_hel); 870 u3x_cell(n_hel, &pn_hel, &qn_hel); 871 872 if ( (c3n == u3du(pn_hel)) ) { 873 bit_o = __((iq_tub == pn_hel)); 874 } 875 else { 876 u3_noun hpn_hel = u3h(pn_hel); 877 u3_noun tpn_hel = u3t(pn_hel); 878 879 if ( !_(u3a_is_cat(hpn_hel)) || 880 !_(u3a_is_cat(tpn_hel)) ) { 881 return _fail(tub); 882 } 883 else bit_o = __((iq_tub >= hpn_hel) && (iq_tub <= tpn_hel)); 884 } 885 886 if ( c3y == bit_o ) { 887 return u3x_good 888 (u3n_slam_on(u3k(qn_hel), u3k(tub))); 889 } else { 890 if ( c3y == _stew_wor(iq_tub, pn_hel) ) { 891 hel = l_hel; 892 } 893 else hel = r_hel; 894 } 895 } 896 } 897 } 898 } 899 u3_noun u3we_stew_fun(u3_noun cor)900 u3we_stew_fun(u3_noun cor) 901 { 902 u3_noun con, hel, tub; 903 904 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &con, 0)) || 905 (u3_none == (hel = u3r_at(2, con))) ) 906 { 907 return u3m_bail(c3__fail); 908 } else { 909 return _cqe_stew_fun(hel, tub); 910 } 911 } 912 913 /* stir 914 */ 915 static u3_noun _cqe_stir_fun(u3_noun rud,u3_noun raq,u3_noun fel,u3_noun tub)916 _cqe_stir_fun(u3_noun rud, 917 u3_noun raq, 918 u3_noun fel, 919 u3_noun tub) 920 { 921 u3_noun vex = u3x_good(u3n_slam_on(u3k(fel), u3k(tub))); 922 u3_noun p_vex, q_vex; 923 u3_noun ret; 924 925 u3x_cell(vex, &p_vex, &q_vex); 926 if ( c3n == u3du(q_vex) ) { 927 ret = u3nq(u3k(p_vex), 928 u3_nul, 929 u3k(rud), 930 u3k(tub)); 931 } 932 else { 933 u3_noun uq_vex = u3t(q_vex); 934 u3_noun puq_vex, quq_vex; 935 u3_noun wag, p_wag, q_wag, uq_wag, puq_wag, quq_wag; 936 937 u3x_cell(uq_vex, &puq_vex, &quq_vex); 938 wag = _cqe_stir_fun(rud, raq, fel, quq_vex); 939 940 u3x_cell(wag, &p_wag, &q_wag); 941 if ( c3n == u3du(q_wag) ) { 942 return u3m_bail(c3__fail); 943 } 944 uq_wag = u3t(q_wag); 945 u3x_cell(uq_wag, &puq_wag, &quq_wag); 946 947 ret = u3nq(_last(p_vex, p_wag), 948 u3_nul, 949 u3x_good(u3n_slam_on(u3k(raq), 950 u3nc(u3k(puq_vex), 951 u3k(puq_wag)))), 952 u3k(quq_wag)); 953 u3z(wag); 954 } 955 u3z(vex); 956 return ret; 957 } 958 959 u3_noun u3we_stir_fun(u3_noun cor)960 u3we_stir_fun(u3_noun cor) 961 { 962 u3_noun van, rud, raq, fel, tub; 963 964 if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || 965 (c3n == u3r_mean(van, u3x_sam_2, &rud, 966 u3x_sam_6, &raq, 967 u3x_sam_7, &fel, 968 0)) ) 969 { 970 return u3m_bail(c3__fail); 971 } else { 972 return _cqe_stir_fun(rud, raq, fel, tub); 973 } 974 } 975