1 2------ Test 1 ------- 3p :- 4 p(A). 5 6p / 0: 7label(1): 8 put_variable a(1) 9 jmp p / 1 10 11------ Test 2 ------- 12p :- 13 p(A), 14 q(A), 15 r(A). 16 17p / 0: 18label(1): 19 allocate 1 20 put_global_variable_callf a(1) y(1) p / 1 Y[1] 21 move_callf y(1) a(1) q / 1 Y[1] 22 move_chain y(1) a(1) r / 1 23 24------ Test 3 ------- 25p :- 26 ( 27 q(A) 28 ; 29 r(A) 30 ). 31 32p / 0: 33label(1): 34 try_me_else 0 0 ref(3) 35label(2): 36 put_variable a(1) 37 jmp q / 1 38label(3): 39 trust_me 0 40label(4): 41 put_variable a(1) 42 jmp r / 1 43 44------ Test 4 ------- 45p :- 46 p(A), 47 ( 48 q(A) 49 ; 50 r(A) 51 ). 52 53p / 0: 54label(1): 55 allocate 1 56 put_global_variable_callf a(1) y(1) p / 1 Y[1] 57 try_me_else 0 0 ref(3) 58label(2): 59 move_chain y(1) a(1) q / 1 60label(3): 61 trust_me_inline 0 Y[1] 62label(4): 63 move_chain y(1) a(1) r / 1 64 65------ Test 5 ------- 66p :- 67 ( 68 q(A) 69 ; 70 r(A) 71 ), 72 p(A). 73 74p / 0: 75label(1): 76 try_me_else 0 0 ref(3) 77label(2): 78 allocate 1 79 put_global_variable_callf a(1) y(1) q / 1 Y[1] 80 move_chain y(1) a(1) p / 1 81label(3): 82 trust_me 0 83label(4): 84 allocate 1 85 put_global_variable_callf a(1) y(1) r / 1 Y[1] 86 move_chain y(1) a(1) p / 1 87 88------ Test 6 ------- 89p :- 90 ( 91 q(A), 92 r(A) 93 ; 94 s(A), 95 t(A) 96 ). 97 98p / 0: 99label(1): 100 try_me_else 0 0 ref(3) 101label(2): 102 allocate 1 103 put_global_variable_callf a(1) y(1) q / 1 Y[1] 104 move_chain y(1) a(1) r / 1 105label(3): 106 trust_me 0 107label(4): 108 allocate 1 109 put_global_variable_callf a(1) y(1) s / 1 Y[1] 110 move_chain y(1) a(1) t / 1 111 112------ Test 7 ------- 113p :- 114 f(A), 115 ( 116 q(A), 117 r(A) 118 ; 119 s(A), 120 t(A) 121 ). 122 123p / 0: 124label(1): 125 allocate 1 126 put_global_variable_callf a(1) y(1) f / 1 Y[1] 127 try_me_else 0 0 ref(3) 128label(2): 129 move_callf y(1) a(1) q / 1 Y[1] 130 move_chain y(1) a(1) r / 1 131label(3): 132 trust_me_inline 0 Y[1] 133label(4): 134 move_callf y(1) a(1) s / 1 Y[1] 135 move_chain y(1) a(1) t / 1 136 137------ Test 8 ------- 138p :- 139 ( 140 q(A), 141 r(A) 142 ; 143 s(A), 144 t(A) 145 ), 146 f(A). 147 148p / 0: 149label(1): 150 try_me_else 0 0 ref(3) 151label(2): 152 allocate 1 153 put_global_variable_callf a(1) y(1) q / 1 Y[1] 154 move_callf y(1) a(1) r / 1 Y[1] 155 move_chain y(1) a(1) f / 1 156label(3): 157 trust_me 0 158label(4): 159 allocate 1 160 put_global_variable_callf a(1) y(1) s / 1 Y[1] 161 move_callf y(1) a(1) t / 1 Y[1] 162 move_chain y(1) a(1) f / 1 163 164------ Test 9 ------- 165p :- 166 ( 167 a(A) 168 ; 169 ( 170 b(A) 171 ; 172 c(A) 173 ), 174 ( 175 d(A) 176 ; 177 e(A) 178 ) 179 ). 180 181p / 0: 182label(1): 183 try_me_else 0 0 ref(3) 184label(2): 185 put_variable a(1) 186 jmp a / 1 187label(3): 188 trust_me 0 189label(4): 190 try_me_else 0 0 ref(6) 191label(5): 192 allocate 1 193 put_global_variable_callf a(1) y(1) b / 1 Y[1] 194label(8): 195 try_me_else 0 0 ref(10) 196label(9): 197 move_chain y(1) a(1) d / 1 198label(6): 199 trust_me 0 200label(7): 201 allocate 1 202 put_global_variable_callf a(1) y(1) c / 1 Y[1] 203 branch ref(8) 204label(10): 205 trust_me_inline 0 Y[1] 206label(11): 207 move_chain y(1) a(1) e / 1 208 209------ Test 10 ------- 210p(a, A) :- 211 q(A). 212p(b, A) :- 213 r(A). 214 215INDEXES for (nondet) disjunction [2] 2161. Quality 1.3 217 [] - [] 218 [atom] - [] 219 [atom, a] - [1] 220 [atom, b] - [2] 221 [var] - [1, 2] 222Branch determinisms for disjunction [2] 223 Branch 1: try 224 Branch 2: trust 225p / 2: 226label(1): 227 atom_switch a(1) 228 a: ref(7) 229 b: ref(8) 230 default: ref(fail) 231 232label(2): 233 try_me_else 0 2 ref(4) 234label(3): 235 get_atom a(1) a 236label(7): 237 move a(2) a(1) 238 jmp q / 1 239label(4): 240 trust_me 0 241label(5): 242 get_atom a(1) b 243label(8): 244 move a(2) a(1) 245 jmp r / 1 246 247------ Test 11 ------- 248p :- 249 p(A, A). 250 251p / 0: 252label(1): 253 put_variable a(1) 254 move a(1) a(2) 255 jmp p / 2 256 257------ Test 12 ------- 258p :- 259 p(A, A), 260 q(A, A), 261 r(A, A). 262 263p / 0: 264label(1): 265 allocate 1 266 put_global_variable a(1) y(1) 267 move a(1) a(2) 268 callf p / 2 Y[1] 269 move y(1) a(1) 270 move a(1) a(2) 271 callf q / 2 Y[1] 272 move y(1) a(1) 273 move a(1) a(2) 274 chain r / 2 275 276------ Test 13 ------- 277p :- 278 ( 279 q(A, A) 280 ; 281 r(A, A) 282 ). 283 284p / 0: 285label(1): 286 try_me_else 0 0 ref(3) 287label(2): 288 put_variable a(1) 289 move a(1) a(2) 290 jmp q / 2 291label(3): 292 trust_me 0 293label(4): 294 put_variable a(1) 295 move a(1) a(2) 296 jmp r / 2 297 298------ Test 14 ------- 299p :- 300 p(A, A), 301 ( 302 q(A, A) 303 ; 304 r(A, A) 305 ). 306 307p / 0: 308label(1): 309 allocate 1 310 put_global_variable a(1) y(1) 311 move a(1) a(2) 312 callf p / 2 Y[1] 313 try_me_else 0 0 ref(3) 314label(2): 315 move y(1) a(1) 316 move a(1) a(2) 317 chain q / 2 318label(3): 319 trust_me_inline 0 Y[1] 320label(4): 321 move y(1) a(1) 322 move a(1) a(2) 323 chain r / 2 324 325------ Test 15 ------- 326p :- 327 ( 328 q(A, A) 329 ; 330 r(A, A) 331 ), 332 p(A, A). 333 334p / 0: 335label(1): 336 try_me_else 0 0 ref(3) 337label(2): 338 allocate 1 339 put_global_variable a(1) y(1) 340 move a(1) a(2) 341 callf q / 2 Y[1] 342label(5): 343 move y(1) a(1) 344 move a(1) a(2) 345 chain p / 2 346label(3): 347 trust_me 0 348label(4): 349 allocate 1 350 put_global_variable a(1) y(1) 351 move a(1) a(2) 352 callf r / 2 Y[1] 353 branch ref(5) 354 355------ Test 16 ------- 356p :- 357 ( 358 q(A, A), 359 r(A, A) 360 ; 361 s(A, A), 362 t(A, A) 363 ). 364 365p / 0: 366label(1): 367 try_me_else 0 0 ref(3) 368label(2): 369 allocate 1 370 put_global_variable a(1) y(1) 371 move a(1) a(2) 372 callf q / 2 Y[1] 373 move y(1) a(1) 374 move a(1) a(2) 375 chain r / 2 376label(3): 377 trust_me 0 378label(4): 379 allocate 1 380 put_global_variable a(1) y(1) 381 move a(1) a(2) 382 callf s / 2 Y[1] 383 move y(1) a(1) 384 move a(1) a(2) 385 chain t / 2 386 387------ Test 17 ------- 388p :- 389 f(A, A), 390 ( 391 q(A, A), 392 r(A, A) 393 ; 394 s(A, A), 395 t(A, A) 396 ). 397 398p / 0: 399label(1): 400 allocate 1 401 put_global_variable a(1) y(1) 402 move a(1) a(2) 403 callf f / 2 Y[1] 404 try_me_else 0 0 ref(3) 405label(2): 406 move y(1) a(1) 407 move a(1) a(2) 408 callf q / 2 Y[1] 409 move y(1) a(1) 410 move a(1) a(2) 411 chain r / 2 412label(3): 413 trust_me_inline 0 Y[1] 414label(4): 415 move y(1) a(1) 416 move a(1) a(2) 417 callf s / 2 Y[1] 418 move y(1) a(1) 419 move a(1) a(2) 420 chain t / 2 421 422------ Test 18 ------- 423p :- 424 ( 425 q(A, A), 426 r(A, A) 427 ; 428 s(A, A), 429 t(A, A) 430 ), 431 f(A, A). 432 433p / 0: 434label(1): 435 try_me_else 0 0 ref(3) 436label(2): 437 allocate 1 438 put_global_variable a(1) y(1) 439 move a(1) a(2) 440 callf q / 2 Y[1] 441 move y(1) a(1) 442 move a(1) a(2) 443 callf r / 2 Y[1] 444label(5): 445 move y(1) a(1) 446 move a(1) a(2) 447 chain f / 2 448label(3): 449 trust_me 0 450label(4): 451 allocate 1 452 put_global_variable a(1) y(1) 453 move a(1) a(2) 454 callf s / 2 Y[1] 455 move y(1) a(1) 456 move a(1) a(2) 457 callf t / 2 Y[1] 458 branch ref(5) 459 460------ Test 19 ------- 461p :- 462 a(A), 463 ( 464 a(A, B) 465 ; 466 a(A, B, B) 467 ). 468 469p / 0: 470label(1): 471 allocate 1 472 put_global_variable_callf a(1) y(1) a / 1 Y[1] 473 try_me_else 0 0 ref(3) 474label(2): 475 put_variable a(2) 476 move_chain y(1) a(1) a / 2 477label(3): 478 trust_me_inline 0 Y[1] 479label(4): 480 put_variable a(2) 481 move a(2) a(3) 482 move_chain y(1) a(1) a / 3 483 484------ Test 30 ------- 485p :- 486 p, 487 +(1, 2, 3). 488 489p / 0: 490label(1): 491 allocate 0 492 callf ref(1) Y[] 493 put_integer a(1) 1 494 bi_addi a(1) 2 a(1) 24 495 get_integer a(1) 3 496 exit 497 498------ Test 31 ------- 499p :- 500 p(A), 501 q, 502 +(A, 2, 3). 503 504p / 0: 505label(1): 506 allocate 1 507 put_global_variable_callf a(1) y(1) p / 1 Y[1] 508 callf q / 0 Y[1] 509 move y(1) a(1) 510 bi_addi a(1) 2 a(1) 24 511 get_integer a(1) 3 512 exit 513 514------ Test 32 ------- 515p(A, A, B) :- 516 q(a, b, A). 517 518p / 3: 519label(1): 520 get_value a(2) a(1) 521 move a(1) a(3) 522 put_atom a(1) a 523 put_atom a(2) b 524 jmp q / 3 525 526------ Test 33 ------- 527p(A, A) :- 528 +(B, C, 1), 529 q(a, b, A). 530 531p / 2: 532label(1): 533 get_value a(2) a(1) 534 put_variable2 a(4) a(5) 535 bi_add a(4) a(5) a(4) 16 536 get_integer a(4) 1 537 move a(1) a(3) 538 put_atom a(1) a 539 put_atom a(2) b 540 jmp q / 3 541 542------ Test 34 ------- 543p(A, B, C) :- 544 +(D, E, F), 545 p(A, B, C). 546 547p / 3: 548label(1): 549 put_variable2 a(4) a(5) 550 bi_add a(4) a(5) a(4) 16 551 jmp ref(1) 552 553------ Test 35 ------- 554p(A) :- 555 ( 556 q(A) 557 ; 558 r(A) 559 ). 560 561p / 1: 562label(1): 563 try_me_else 0 1 ref(3) 564label(2): 565 jmp q / 1 566label(3): 567 trust_me 0 568label(4): 569 jmp r / 1 570 571------ Test 36 ------- 572p :- 573 A = B, 574 q, 575 r(B). 576 577p / 0: 578label(1): 579 allocate 1 580 put_global_variable y(1) 581 callf q / 0 Y[1] 582 move_chain y(1) a(1) r / 1 583 584------ Test 37 ------- 585p :- 586 A = B, 587 q(A), 588 r(B). 589 590p / 0: 591label(1): 592 allocate 1 593 put_global_variable_callf a(1) y(1) q / 1 Y[1] 594 move_chain y(1) a(1) r / 1 595 596------ Test 38 ------- 597p(A) :- 598 q, 599 r(A). 600 601p / 1: 602label(1): 603 get_variable 1 a(1) y(1) 604 callf q / 0 Y[1] 605 move_chain y(1) a(1) r / 1 606 607------ Test 39 ------- 608p(A) :- 609 B = A, 610 q(B), 611 r(A). 612 613p / 1: 614label(1): 615 move a(1) a(2) 616 get_variable 1 a(1) y(1) 617 move a(2) a(1) 618 callf q / 1 Y[1] 619 move_chain y(1) a(1) r / 1 620 621------ Test 40 ------- 622p :- 623 q(A), 624 ( 625 r1(B), 626 r2(A, B) 627 ; 628 s(A) 629 ). 630 631p / 0: 632label(1): 633 allocate 2 634 put_global_variable_callf a(1) y(1) q / 1 Y[1] 635 try_me_else 0 0 ref(3) 636label(2): 637 put_global_variable_callf a(1) y(2) r1 / 1 Y[1,2] 638 move 2 y(1) a(1) 639 chain r2 / 2 640label(3): 641 trust_me_inline 0 Y[1] 642label(4): 643 move_chain y(1) a(1) s / 1 644 645------ Test 41 ------- 646p :- 647 ( 648 ! 649 ; 650 p(A), 651 p(A), 652 ! 653 ). 654 655p / 0: 656label(1): 657 savecut a(1) 658 try_me_else 0 1 ref(3) 659label(2): 660 cut a(1) 661 ret 662label(3): 663 trust_me 0 664label(4): 665 get_variable 2 a(1) y(1) 666 put_global_variable_callf a(1) y(2) p / 1 Y[1,2] 667 move_callf y(2) a(1) p / 1 Y[1] 668 cut y(1) 0 669 exit 670 671------ Test 42 ------- 672p(A, B) :- 673 !. 674p(A, B) :- 675 p(A), 676 p(B), 677 !. 678 679p / 2: 680label(1): 681 move a(2) a(3) 682 savecut a(2) 683 get_variable 2 a(3) y(1) 684 try_me_else 0 2 ref(3) 685label(2): 686 cut a(2) 0 687 exit 688label(3): 689 trust_me_inline 0 Y[1] 690label(4): 691 move a(2) y(2) 692 callf p / 1 Y[1,2] 693 move_callf y(1) a(1) p / 1 Y[2] 694 cut y(2) 0 695 exit 696 697------ Test 43 ------- 698p :- 699 s(A), 700 ( 701 c(A) 702 ; 703 p(B), 704 p(B), 705 c(A) 706 ). 707 708p / 0: 709label(1): 710 allocate 2 711 put_global_variable_callf a(1) y(1) s / 1 Y[1] 712 try_me_else 0 0 ref(3) 713label(2): 714 move_chain y(1) a(1) c / 1 715label(3): 716 trust_me_inline 0 Y[1] 717label(4): 718 put_global_variable_callf a(1) y(2) p / 1 Y[1,2] 719 move_callf y(2) a(1) p / 1 Y[1] 720 move_chain y(1) a(1) c / 1 721 722------ Test 44 ------- 723p :- 724 s(A), 725 ( 726 c(A) 727 ; 728 p(B), 729 p(A), 730 c(B) 731 ). 732 733p / 0: 734label(1): 735 allocate 2 736 put_global_variable_callf a(1) y(1) s / 1 Y[1] 737 try_me_else 0 0 ref(3) 738label(2): 739 move_chain y(1) a(1) c / 1 740label(3): 741 trust_me_inline 0 Y[1] 742label(4): 743 put_global_variable_callf a(1) y(2) p / 1 Y[1,2] 744 move_callf y(1) a(1) p / 1 Y[2] 745 move_chain y(2) a(1) c / 1 746 747------ Test 45 ------- 748p :- 749 s(A), 750 ( 751 p(A), 752 q, 753 r 754 ; 755 ( 756 p, 757 q(A), 758 r 759 ; 760 p, 761 q, 762 r(A) 763 ) 764 ). 765 766p / 0: 767label(1): 768 allocate 1 769 put_global_variable_callf a(1) y(1) s / 1 Y[1] 770 try_me_else 0 0 ref(3) 771label(2): 772 move_callf y(1) a(1) p / 1 Y[] 773 callf q / 0 Y[] 774 chain r / 0 775label(3): 776 retry_me_inline 0 ref(5) Y[1] 777label(4): 778 callf ref(1) Y[1] 779 move_callf y(1) a(1) q / 1 Y[] 780 chain r / 0 781label(5): 782 trust_me_inline 0 Y[1] 783label(6): 784 callf ref(1) Y[1] 785 callf q / 0 Y[1] 786 move_chain y(1) a(1) r / 1 787 788------ Test 46 ------- 789p :- 790 s(A), 791 ( 792 p, 793 q, 794 r(A) 795 ; 796 ( 797 p, 798 q(A), 799 r 800 ; 801 p(A), 802 q, 803 r 804 ) 805 ). 806 807p / 0: 808label(1): 809 allocate 1 810 put_global_variable_callf a(1) y(1) s / 1 Y[1] 811 try_me_else 0 0 ref(3) 812label(2): 813 callf ref(1) Y[1] 814 callf q / 0 Y[1] 815 move_chain y(1) a(1) r / 1 816label(3): 817 retry_me_inline 0 ref(5) Y[1] 818label(4): 819 callf ref(1) Y[1] 820 move_callf y(1) a(1) q / 1 Y[] 821 chain r / 0 822label(5): 823 trust_me_inline 0 Y[1] 824label(6): 825 move_callf y(1) a(1) p / 1 Y[] 826 callf q / 0 Y[] 827 chain r / 0 828 829------ Test 47 ------- 830p :- 831 s(A), 832 ( 833 p, 834 q(A), 835 r 836 ; 837 ( 838 p, 839 q, 840 r(A) 841 ; 842 p, 843 q, 844 r(A) 845 ) 846 ). 847 848p / 0: 849label(1): 850 allocate 1 851 put_global_variable_callf a(1) y(1) s / 1 Y[1] 852 try_me_else 0 0 ref(3) 853label(2): 854 callf ref(1) Y[1] 855 move_callf y(1) a(1) q / 1 Y[] 856 chain r / 0 857label(3): 858 retry_me_inline 0 ref(5) Y[1] 859label(4): 860 callf ref(1) Y[1] 861 callf q / 0 Y[1] 862 move_chain y(1) a(1) r / 1 863label(5): 864 trust_me_inline 0 Y[1] 865label(6): 866 callf ref(1) Y[1] 867 callf q / 0 Y[1] 868 move_chain y(1) a(1) r / 1 869 870------ Test 50 ------- 871p :- 872 s(A), 873 ( 874 p(A), 875 q(B), 876 r(B) 877 ; 878 p(B), 879 q(B, C), 880 r(C) 881 ). 882 883p / 0: 884label(1): 885 allocate 3 886 put_global_variable_callf a(1) y(1) s / 1 Y[1] 887 try_me_else 0 0 ref(3) 888label(2): 889 move_callf y(1) a(1) p / 1 Y[] 890 put_global_variable_callf a(1) y(2) q / 1 Y[2] 891 move_chain y(2) a(1) r / 1 892label(3): 893 trust_me_inline 0 Y[] 894label(4): 895 put_global_variable_callf a(1) y(3) p / 1 Y[3] 896 put_global_variable a(2) y(2) 897 move_callf y(3) a(1) q / 2 Y[2] 898 move_chain y(2) a(1) r / 1 899 900------ Test 51 ------- 901p :- 902 s(A), 903 ( 904 p(A), 905 q(B), 906 r(B) 907 ; 908 ( 909 p1(A), 910 q1(C), 911 q1(C) 912 ; 913 p(B), 914 q(B, D), 915 r(D) 916 ) 917 ). 918 919p / 0: 920label(1): 921 allocate 3 922 put_global_variable_callf a(1) y(1) s / 1 Y[1] 923 try_me_else 0 0 ref(3) 924label(2): 925 move_callf y(1) a(1) p / 1 Y[] 926 put_global_variable_callf a(1) y(2) q / 1 Y[2] 927 move_chain y(2) a(1) r / 1 928label(3): 929 retry_me_inline 0 ref(5) Y[1] 930label(4): 931 move_callf y(1) a(1) p1 / 1 Y[] 932 put_global_variable_callf a(1) y(2) q1 / 1 Y[2] 933 move_chain y(2) a(1) q1 / 1 934label(5): 935 trust_me_inline 0 Y[] 936label(6): 937 put_global_variable_callf a(1) y(3) p / 1 Y[3] 938 put_global_variable a(2) y(2) 939 move_callf y(3) a(1) q / 2 Y[2] 940 move_chain y(2) a(1) r / 1 941 942------ Test 52 ------- 943p :- 944 ( 945 p(A) 946 ; 947 q 948 ), 949 ( 950 p(A) 951 ; 952 q 953 ). 954 955p / 0: 956label(1): 957 try_me_else 0 0 ref(3) 958label(2): 959 allocate 1 960 put_global_variable_callf a(1) y(1) p / 1 Y[1] 961label(5): 962 try_me_else 0 0 ref(7) 963label(6): 964 move_chain y(1) a(1) p / 1 965label(3): 966 trust_me 0 967label(4): 968 allocate 1 969 callf q / 0 Y[] 970 gc_test 1 971 put_global_variable y(1) 972 branch ref(5) 973label(7): 974 trust_me_inline 0 Y[] 975label(8): 976 chain q / 0 977 978------ Test 53 ------- 979p :- 980 ( 981 p(A) 982 ; 983 q(A) 984 ), 985 ( 986 p(A) 987 ; 988 q 989 ). 990 991p / 0: 992label(1): 993 try_me_else 0 0 ref(3) 994label(2): 995 allocate 1 996 put_global_variable_callf a(1) y(1) p / 1 Y[1] 997label(5): 998 try_me_else 0 0 ref(7) 999label(6): 1000 move_chain y(1) a(1) p / 1 1001label(3): 1002 trust_me 0 1003label(4): 1004 allocate 1 1005 put_global_variable_callf a(1) y(1) q / 1 Y[1] 1006 branch ref(5) 1007label(7): 1008 trust_me_inline 0 Y[] 1009label(8): 1010 chain q / 0 1011 1012------ Test 54 ------- 1013p(A) :- 1014 A = a, 1015 p, 1016 p(A). 1017 1018p / 1: 1019label(1): 1020 get_atom a(1) a 1021 get_variable 1 a(1) y(1) 1022 callf p / 0 Y[1] 1023 move_chain y(1) a(1) ref(1) 1024 1025------ Test 55 ------- 1026p(A) :- 1027 A = B, 1028 p(B), 1029 p(A). 1030 1031p / 1: 1032label(1): 1033 move a(1) a(2) 1034 get_variable 1 a(1) y(1) 1035 move a(2) a(1) 1036 callf ref(1) Y[1] 1037 move_chain y(1) a(1) ref(1) 1038 1039------ Test 56 ------- 1040p(A, B) :- 1041 A = B, 1042 p(B), 1043 p(A). 1044 1045p / 2: 1046label(1): 1047 get_value a(1) a(2) 1048 get_variable 1 a(1) y(1) 1049 move a(2) a(1) 1050 callf p / 1 Y[1] 1051 move_chain y(1) a(1) p / 1 1052 1053------ Test 57 ------- 1054p(A, B) :- 1055 A = B, 1056 p, 1057 p(A, B). 1058 1059p / 2: 1060label(1): 1061 get_value a(1) a(2) 1062 get_variable 2 a(1) y(1) 1063 move a(2) y(2) 1064 callf p / 0 Y[1,2] 1065 move 2 y(1) a(1) 1066 chain ref(1) 1067 1068------ Test 58 ------- 1069p(A) :- 1070 A = B, 1071 p, 1072 p(A, B). 1073 1074p / 1: 1075label(1): 1076 get_variable 2 a(1) y(2) 1077 move a(1) y(1) 1078 callf p / 0 Y[1,2] 1079 move 2 y(1) a(1) 1080 chain p / 2 1081 1082------ Test 59 ------- 1083p(A) :- 1084 A = B, 1085 p, 1086 p(A). 1087 1088p / 1: 1089label(1): 1090 get_variable 1 a(1) y(1) 1091 callf p / 0 Y[1] 1092 move_chain y(1) a(1) ref(1) 1093 1094------ Test 60 ------- 1095p :- 1096 A = B, 1097 p, 1098 p(A, B). 1099 1100p / 0: 1101label(1): 1102 allocate 2 1103 put_global_variable y(1) 1104 move y(1) y(2) 1105 callf ref(1) Y[1,2] 1106 move 2 y(1) a(1) 1107 chain p / 2 1108 1109------ Test 61 ------- 1110p :- 1111 ( 1112 !, 1113 A = B, 1114 !, 1115 p 1116 ; 1117 p 1118 ). 1119 1120p / 0: 1121label(1): 1122 savecut a(1) 1123 try_me_else 0 1 ref(3) 1124label(2): 1125 cut a(1) 1126 jmp ref(1) 1127label(3): 1128 trust_me 0 1129label(4): 1130 jmp ref(1) 1131 1132------ Test 70 ------- 1133p :- 1134 A = B, 1135 p(A). 1136 1137p / 0: 1138label(1): 1139 put_variable a(1) 1140 jmp p / 1 1141 1142------ Test 71 ------- 1143p(A) :- 1144 B = A, 1145 p(B), 1146 q(A). 1147 1148p / 1: 1149label(1): 1150 move a(1) a(2) 1151 get_variable 1 a(1) y(1) 1152 move a(2) a(1) 1153 callf ref(1) Y[1] 1154 move_chain y(1) a(1) q / 1 1155 1156------ Test 72 ------- 1157p(A) :- 1158 r, 1159 B = A, 1160 p(B), 1161 q(A). 1162 1163p / 1: 1164label(1): 1165 get_variable 1 a(1) y(1) 1166 callf r / 0 Y[1] 1167 move_callf y(1) a(1) ref(1) Y[1] 1168 move_chain y(1) a(1) q / 1 1169 1170------ Test 73 ------- 1171p(A) :- 1172 r, 1173 var(A), 1174 B = A, 1175 p(B), 1176 q(A). 1177 1178p / 1: 1179label(1): 1180 get_variable 1 a(1) y(1) 1181 callf r / 0 Y[1] 1182 move y(1) a(2) 1183 bi_var a(2) 1184 move_callf y(1) a(1) ref(1) Y[1] 1185 move_chain y(1) a(1) q / 1 1186 1187------ Test 74 ------- 1188p :- 1189 A = B, 1190 p(A), 1191 q(B). 1192 1193p / 0: 1194label(1): 1195 allocate 1 1196 put_global_variable_callf a(1) y(1) p / 1 Y[1] 1197 move_chain y(1) a(1) q / 1 1198 1199------ Test 75 ------- 1200p :- 1201 p(A), 1202 var(A), 1203 B = A. 1204 1205p / 0: 1206label(1): 1207 allocate 1 1208 put_global_variable_callf a(1) y(1) p / 1 Y[1] 1209 move y(1) a(1) 1210 bi_var a(1) 1211 exit 1212 1213------ Test 76 ------- 1214p :- 1215 p(A, B), 1216 var(A), 1217 var(B), 1218 A = B. 1219 1220p / 0: 1221label(1): 1222 allocate 2 1223 put_global_variable2 a(1) y(1) a(2) y(2) 1224 callf p / 2 Y[1,2] 1225 move y(1) a(1) 1226 bi_var a(1) 1227 move y(2) a(2) 1228 bi_var a(2) 1229 get_value a(1) a(2) 1230 exit 1231 1232------ Test 77 ------- 1233p :- 1234 p(A, B), 1235 var(A), 1236 A = B. 1237 1238p / 0: 1239label(1): 1240 allocate 2 1241 put_global_variable2 a(1) y(1) a(2) y(2) 1242 callf p / 2 Y[1,2] 1243 move y(1) a(1) 1244 bi_var a(1) 1245 get_value a(1) y(2) 1246 exit 1247 1248------ Test 80 ------- 1249p(A, B, C, D, E) :- 1250 t, 1251 F = G, 1252 H = I, 1253 J = I, 1254 K = L, 1255 M = L, 1256 N = A, 1257 O = P, 1258 Q = R, 1259 S = R, 1260 T = U, 1261 V = L, 1262 W = B, 1263 O = X, 1264 Q = Y, 1265 S = Y, 1266 T = Z, 1267 V = L, 1268 W = C, 1269 A1 = B1, 1270 C1 = D1, 1271 E1 = D1, 1272 F1 = G1, 1273 H1 = L, 1274 I1 = D, 1275 A1 = J1, 1276 C1 = K1, 1277 E1 = K1, 1278 F1 = L1, 1279 H1 = L, 1280 I1 = E, 1281 q, 1282 A1 = M1, 1283 C1 = N1, 1284 E1 = N1, 1285 F1 = O1, 1286 H1 = A1, 1287 G1 = A, 1288 r(L, I1, U, Z, A1, C1, E1, F1, H1, G1, L1), 1289 var(O1). 1290 1291p / 5: 1292label(1): 1293 get_variable 17 a(1) y(13) 1294 move 4 a(2) y(14) 1295 callf t / 0 Y[13,14,15,16,17] 1296 put_variable a(1) 1297 put_global_variable y(2) 1298 put_variable2 a(1) a(1) 1299 move a(1) a(2) 1300 put_global_variable a(3) y(3) 1301 get_value a(2) a(1) 1302 move a(3) y(4) 1303 get_value y(2) y(2) 1304 get_value y(14) y(15) 1305 put_global_variable y(5) 1306 put_global_variable a(1) y(6) 1307 move a(1) y(7) 1308 put_global_variable y(8) 1309 move y(8) y(9) y(2) y(10) y(16) y(11) 1310 get_value y(6) y(7) 1311 move y(8) y(12) 1312 get_value y(2) y(10) 1313 get_value y(11) y(17) 1314 callf q / 0 Y[2,3,4,5,6,7,8,9,10,11,12,13] 1315 get_value y(6) y(7) 1316 move y(8) y(1) 1317 get_value y(5) y(10) 1318 get_value y(9) y(13) 1319 move y(2) a(1) y(11) a(2) 1320 move 6 y(3) a(3) 1321 move y(10) a(9) y(9) a(10) y(12) a(11) 1322 callf r / 11 Y[1] 1323 move y(1) a(1) 1324 bi_var a(1) 1325 exit 1326 1327------ Test 101 ------- 1328p :- 1329 p(A), 1330 q(B, A), 1331 r(B), 1332 t(B). 1333 1334p / 0: 1335label(1): 1336 allocate 2 1337 put_global_variable_callf a(1) y(2) p / 1 Y[2] 1338 put_global_variable a(1) y(1) 1339 move_callf y(2) a(2) q / 2 Y[1] 1340 move_callf y(1) a(1) r / 1 Y[1] 1341 move_chain y(1) a(1) t / 1 1342 1343------ Test 102 ------- 1344p :- 1345 p(A), 1346 q(A, B, C), 1347 r(B, D), 1348 t(D). 1349 1350p / 0: 1351label(1): 1352 allocate 3 1353 put_global_variable_callf a(1) y(3) p / 1 Y[3] 1354 put_variable a(3) 1355 put_global_variable a(2) y(2) 1356 move_callf y(3) a(1) q / 3 Y[2] 1357 put_global_variable a(2) y(1) 1358 move_callf y(2) a(1) r / 2 Y[1] 1359 move_chain y(1) a(1) t / 1 1360 1361------ Test 103 ------- 1362p :- 1363 ( 1364 f(A), 1365 g(A), 1366 a(B) 1367 ; 1368 b(C), 1369 c(C), 1370 d(B) 1371 ), 1372 e(B). 1373 1374p / 0: 1375label(1): 1376 try_me_else 0 0 ref(3) 1377label(2): 1378 allocate 2 1379 put_global_variable_callf a(1) y(2) f / 1 Y[2] 1380 move_callf y(2) a(1) g / 1 Y[] 1381 put_global_variable_callf a(1) y(1) a / 1 Y[1] 1382 move_chain y(1) a(1) e / 1 1383label(3): 1384 trust_me 0 1385label(4): 1386 allocate 2 1387 put_global_variable_callf a(1) y(2) b / 1 Y[2] 1388 move_callf y(2) a(1) c / 1 Y[] 1389 put_global_variable_callf a(1) y(1) d / 1 Y[1] 1390 move_chain y(1) a(1) e / 1 1391 1392------ Test 104 ------- 1393p :- 1394 ( 1395 f(A), 1396 g(A), 1397 a(B) 1398 ; 1399 b(C), 1400 c(C) 1401 ), 1402 e(B). 1403 1404p / 0: 1405label(1): 1406 try_me_else 0 0 ref(3) 1407label(2): 1408 allocate 2 1409 put_global_variable_callf a(1) y(2) f / 1 Y[2] 1410 move_callf y(2) a(1) g / 1 Y[] 1411 put_global_variable_callf a(1) y(1) a / 1 Y[1] 1412 move_chain y(1) a(1) e / 1 1413label(3): 1414 trust_me 0 1415label(4): 1416 allocate 2 1417 put_global_variable_callf a(1) y(2) b / 1 Y[2] 1418 move_callf y(2) a(1) c / 1 Y[] 1419 gc_test 1 1420 put_global_variable y(1) 1421 move_chain y(1) a(1) e / 1 1422 1423------ Test 105 ------- 1424p :- 1425 ( 1426 f(A), 1427 g(A), 1428 a(B) 1429 ; 1430 b(C), 1431 c(C) 1432 ), 1433 e(B), 1434 f(B). 1435 1436p / 0: 1437label(1): 1438 try_me_else 0 0 ref(3) 1439label(2): 1440 allocate 2 1441 put_global_variable_callf a(1) y(2) f / 1 Y[2] 1442 move_callf y(2) a(1) g / 1 Y[] 1443 put_global_variable_callf a(1) y(1) a / 1 Y[1] 1444label(5): 1445 move_callf y(1) a(1) e / 1 Y[1] 1446 move_chain y(1) a(1) f / 1 1447label(3): 1448 trust_me 0 1449label(4): 1450 allocate 2 1451 put_global_variable_callf a(1) y(2) b / 1 Y[2] 1452 move_callf y(2) a(1) c / 1 Y[] 1453 gc_test 1 1454 put_global_variable y(1) 1455 branch ref(5) 1456 1457------ Test 106 ------- 1458p :- 1459 a(A), 1460 ( 1461 b(A), 1462 c(B) 1463 ; 1464 d(A), 1465 e(B) 1466 ), 1467 f(B). 1468 1469p / 0: 1470label(1): 1471 allocate 2 1472 put_global_variable_callf a(1) y(2) a / 1 Y[2] 1473 try_me_else 0 0 ref(3) 1474label(2): 1475 move_callf y(2) a(1) b / 1 Y[] 1476 put_global_variable_callf a(1) y(1) c / 1 Y[1] 1477 move_chain y(1) a(1) f / 1 1478label(3): 1479 trust_me_inline 0 Y[2] 1480label(4): 1481 move_callf y(2) a(1) d / 1 Y[] 1482 put_global_variable_callf a(1) y(1) e / 1 Y[1] 1483 move_chain y(1) a(1) f / 1 1484 1485------ Test 107 ------- 1486p :- 1487 a(A), 1488 ( 1489 b(A), 1490 c(B) 1491 ; 1492 d(A), 1493 e(B) 1494 ), 1495 f(C). 1496 1497p / 0: 1498label(1): 1499 allocate 1 1500 put_global_variable_callf a(1) y(1) a / 1 Y[1] 1501 try_me_else 0 0 ref(3) 1502label(2): 1503 move_callf y(1) a(1) b / 1 Y[] 1504 put_variable a(1) 1505 callf c / 1 Y[] 1506label(5): 1507 put_variable a(1) 1508 chain f / 1 1509label(3): 1510 trust_me_inline 0 Y[1] 1511label(4): 1512 move_callf y(1) a(1) d / 1 Y[] 1513 put_variable a(1) 1514 callf e / 1 Y[] 1515 branch ref(5) 1516 1517------ Test 108 ------- 1518p :- 1519 a(A), 1520 ( 1521 b(A) 1522 ; 1523 c 1524 ), 1525 d. 1526 1527p / 0: 1528label(1): 1529 allocate 1 1530 put_global_variable_callf a(1) y(1) a / 1 Y[1] 1531 try_me_else 0 0 ref(3) 1532label(2): 1533 move_callf y(1) a(1) b / 1 Y[] 1534 chain d / 0 1535label(3): 1536 trust_me_inline 0 Y[] 1537label(4): 1538 callf c / 0 Y[] 1539 chain d / 0 1540 1541------ Test 109 ------- 1542p :- 1543 a, 1544 b(A), 1545 c(B), 1546 d(A), 1547 e(B), 1548 f. 1549 1550p / 0: 1551label(1): 1552 allocate 2 1553 callf a / 0 Y[] 1554 put_global_variable_callf a(1) y(2) b / 1 Y[2] 1555 put_global_variable_callf a(1) y(1) c / 1 Y[1,2] 1556 move_callf y(2) a(1) d / 1 Y[1] 1557 move_callf y(1) a(1) e / 1 Y[] 1558 chain f / 0 1559 1560------ Test 110 ------- 1561p :- 1562 a(A), 1563 a(A, B, C), 1564 ( 1565 a 1566 ; 1567 ( 1568 b(B), 1569 c(B) 1570 ; 1571 ( 1572 d(D), 1573 e(D) 1574 ; 1575 f(E), 1576 g(E) 1577 ) 1578 ) 1579 ), 1580 f(D, C, F), 1581 g(F). 1582 1583p / 0: 1584label(1): 1585 allocate 6 1586 put_global_variable_callf a(1) y(6) a / 1 Y[6] 1587 put_global_variable2 a(2) y(4) a(3) y(3) 1588 move_callf y(6) a(1) a / 3 Y[3,4] 1589 try_me_else 0 0 ref(3) 1590label(2): 1591 callf a / 0 Y[3] 1592 gc_test 1 1593 put_global_variable y(2) 1594label(9): 1595 put_global_variable a(3) y(1) 1596 move 2 y(2) a(1) 1597 callf f / 3 Y[1] 1598 move_chain y(1) a(1) g / 1 1599label(3): 1600 retry_me_inline 0 ref(5) Y[3,4] 1601label(4): 1602 move_callf y(4) a(1) b / 1 Y[3,4] 1603 move_callf y(4) a(1) c / 1 Y[3] 1604 gc_test 1 1605 put_global_variable y(2) 1606 branch ref(9) 1607label(5): 1608 retry_me_inline 0 ref(7) Y[3] 1609label(6): 1610 put_global_variable_callf a(1) y(2) d / 1 Y[2,3] 1611 move_callf y(2) a(1) e / 1 Y[2,3] 1612 branch ref(9) 1613label(7): 1614 trust_me_inline 0 Y[3] 1615label(8): 1616 put_global_variable_callf a(1) y(5) f / 1 Y[3,5] 1617 move_callf y(5) a(1) g / 1 Y[3] 1618 gc_test 1 1619 put_global_variable y(2) 1620 branch ref(9) 1621 1622------ Test 120 ------- 1623sentence(A, B, C, D, E) :- 1624 declarative(A, B, F, D, G), 1625 terminator(., F, C, G, E). 1626 1627sentence / 5: 1628label(1): 1629 get_variable 4 a(3) y(1) 1630 move a(5) y(2) 1631 put_global_variable2 a(3) y(3) a(5) y(4) 1632 callf declarative / 5 Y[1,2,3,4] 1633 put_atom a(1) . 1634 move y(3) a(2) y(1) a(3) y(4) a(4) 1635 move_chain y(2) a(5) terminator / 5 1636 1637------ Test 130 ------- 1638p(A, B) :- 1639 +(1, A, C), 1640 +(2, C, D), 1641 +(3, D, B). 1642 1643p / 2: 1644label(1): 1645 bi_addi a(1) 1 a(1) 24 1646 bi_addi a(1) 2 a(1) 24 1647 bi_addi a(1) 3 a(1) 24 1648 get_value a(1) a(2) 1649 ret 1650 1651------ Test 200 ------- 1652p :- 1653 a(A, A). 1654 1655p / 0: 1656label(1): 1657 put_variable a(1) 1658 move a(1) a(2) 1659 jmp a / 2 1660 1661------ Test 201 ------- 1662p :- 1663 a(f(A), A). 1664 1665p / 0: 1666label(1): 1667 put_structure a(1) f / 1 1668 push_variable a(2) 1669 jmp a / 2 1670 1671------ Test 202 ------- 1672p :- 1673 a(f(A), A), 1674 b(f(A), A), 1675 c(A, f(A)). 1676 1677p / 0: 1678label(1): 1679 put_structure a(1) f / 1 1680 allocate 1 1681 push_variable y(1) 1682 move_callf y(1) a(2) a / 2 Y[1] 1683 put_structure a(1) f / 1 1684 push_value y(1) 1685 move_callf y(1) a(2) b / 2 Y[1] 1686 put_structure a(2) f / 1 1687 push_value y(1) 1688 move_chain y(1) a(1) c / 2 1689 1690------ Test 203 ------- 1691p :- 1692 a(f(A), g(A)), 1693 b(f(g(A), A)), 1694 c(f(A, g(A))). 1695 1696p / 0: 1697label(1): 1698 put_structure a(1) f / 1 1699 allocate 1 1700 push_variable y(1) 1701 put_structure a(2) g / 1 1702 push_value y(1) 1703 callf a / 2 Y[1] 1704 put_structure a(1) f / 2 1705 push_structure 2 1706 push_value y(1) 1707 write_did g / 1 1708 push_value y(1) 1709 callf b / 1 Y[1] 1710 put_structure a(1) f / 2 1711 push_value y(1) 1712 push_structure 2 1713 write_did g / 1 1714 push_value y(1) 1715 chain c / 1 1716 1717------ Test 204 ------- 1718p(A) :- 1719 a(A). 1720 1721p / 1: 1722label(1): 1723 jmp a / 1 1724 1725------ Test 205 ------- 1726p(A) :- 1727 a(a, A). 1728 1729p / 1: 1730label(1): 1731 move a(1) a(2) 1732 put_atom a(1) a 1733 jmp a / 2 1734 1735------ Test 206 ------- 1736p(a). 1737 1738p / 1: 1739label(1): 1740 get_atom a(1) a 1741 ret 1742 1743------ Test 207 ------- 1744p(A) :- 1745 a(A, A). 1746 1747p / 1: 1748label(1): 1749 move a(1) a(2) 1750 jmp a / 2 1751 1752------ Test 208 ------- 1753p(A, B) :- 1754 a(A, B). 1755 1756p / 2: 1757label(1): 1758 jmp a / 2 1759 1760------ Test 209 ------- 1761p(A, B) :- 1762 a(B, A). 1763 1764p / 2: 1765label(1): 1766 swap a(1) a(2) 1767 jmp a / 2 1768 1769------ Test 210 ------- 1770p :- 1771 A = B, 1772 a(B, A). 1773 1774p / 0: 1775label(1): 1776 put_variable a(2) 1777 move a(2) a(1) 1778 jmp a / 2 1779 1780------ Test 211 ------- 1781p :- 1782 a(A, f(A)). 1783 1784p / 0: 1785label(1): 1786 put_structure a(2) f / 1 1787 push_variable a(1) 1788 jmp a / 2 1789 1790------ Test 212 ------- 1791p(A) :- 1792 a(f(A)). 1793 1794p / 1: 1795label(1): 1796 move a(1) a(2) 1797 put_structure a(1) f / 1 1798 push_value a(2) 1799 jmp a / 1 1800 1801------ Test 213 ------- 1802p(A, B, C) :- 1803 a(C, A, B). 1804 1805p / 3: 1806label(1): 1807 rot a(2) a(1) a(3) 1808 jmp a / 3 1809 1810------ Test 214 ------- 1811p(A, B, C) :- 1812 a(f(C), f(A), f(B)). 1813 1814p / 3: 1815label(1): 1816 move a(1) a(4) 1817 put_structure a(1) f / 1 1818 push_value a(3) 1819 move a(2) a(5) 1820 put_structure a(2) f / 1 1821 push_value a(4) 1822 put_structure a(3) f / 1 1823 push_value a(5) 1824 jmp a / 3 1825 1826------ Test 215 ------- 1827p(A, B, C, A) :- 1828 a(C, A, B). 1829 1830p / 4: 1831label(1): 1832 get_value a(4) a(1) 1833 rot a(2) a(1) a(3) 1834 jmp a / 3 1835 1836------ Test 216 ------- 1837p(A, B, C, A) :- 1838 a(f(C), f(A), f(B)). 1839 1840p / 4: 1841label(1): 1842 get_value a(4) a(1) 1843 move a(1) a(4) 1844 put_structure a(1) f / 1 1845 push_value a(3) 1846 move a(2) a(5) 1847 put_structure a(2) f / 1 1848 push_value a(4) 1849 put_structure a(3) f / 1 1850 push_value a(5) 1851 jmp a / 3 1852 1853------ Test 217 ------- 1854p(f(A)) :- 1855 q(A). 1856 1857p / 1: 1858label(1): 1859 get_structure a(1) f / 1 ref(2) 1860 write_variable a(1) 1861 jmp q / 1 1862label(2): 1863 read_variable a(1) 1864 jmp q / 1 1865 1866------ Test 218 ------- 1867p(A, B, C) :- 1868 a(B, C, A). 1869 1870p / 3: 1871label(1): 1872 rot a(3) a(1) a(2) 1873 jmp a / 3 1874 1875------ Test 219 ------- 1876p(A, B, C) :- 1877 D = A, 1878 a(C, D, B). 1879 1880p / 3: 1881label(1): 1882 rot a(3) a(2) a(1) 1883 jmp a / 3 1884 1885------ Test 220 ------- 1886p(A, B, C) :- 1887 D = A, 1888 a(B, C, D). 1889 1890p / 3: 1891label(1): 1892 rot a(2) a(3) a(1) 1893 jmp a / 3 1894 1895------ Test 221 ------- 1896p :- 1897 a(A, f(A)). 1898 1899p / 0: 1900label(1): 1901 put_structure a(2) f / 1 1902 push_variable a(1) 1903 jmp a / 2 1904 1905------ Test 222 ------- 1906p :- 1907 q(a, A, B, A). 1908 1909p / 0: 1910label(1): 1911 put_variable2 a(2) a(3) 1912 put_atom a(1) a 1913 move a(2) a(4) 1914 jmp q / 4 1915 1916------ Test 223 ------- 1917p :- 1918 q(A, A), 1919 r(A). 1920 1921p / 0: 1922label(1): 1923 allocate 1 1924 put_global_variable a(1) y(1) 1925 move a(1) a(2) 1926 callf q / 2 Y[1] 1927 move_chain y(1) a(1) r / 1 1928 1929------ Test 224 ------- 1930p :- 1931 q(f(A), A), 1932 r(A). 1933 1934p / 0: 1935label(1): 1936 put_structure a(1) f / 1 1937 allocate 1 1938 push_variable y(1) 1939 move_callf y(1) a(2) q / 2 Y[1] 1940 move_chain y(1) a(1) r / 1 1941 1942------ Test 225 ------- 1943p :- 1944 q([a]), 1945 r(A). 1946 1947p / 0: 1948label(1): 1949 put_list a(1) 1950 write_atom a 1951 push_nil 1952 allocate 0 1953 callf q / 1 Y[] 1954 put_variable a(1) 1955 chain r / 1 1956 1957------ Test 226 ------- 1958p :- 1959 q([a, b]), 1960 r(A). 1961 1962p / 0: 1963label(1): 1964 put_list a(1) 1965 write_atom a 1966 push_list 1967 write_atom b 1968 push_nil 1969 allocate 0 1970 callf q / 1 Y[] 1971 put_variable a(1) 1972 chain r / 1 1973 1974------ Test 227 ------- 1975p :- 1976 q([a, A, b]), 1977 r(A). 1978 1979p / 0: 1980label(1): 1981 put_list a(1) 1982 write_atom a 1983 push_list 1984 allocate 1 1985 push_variable y(1) 1986 push_list 1987 write_atom b 1988 push_nil 1989 callf q / 1 Y[1] 1990 move_chain y(1) a(1) r / 1 1991 1992------ Test 228 ------- 1993p :- 1994 q([a, b|A]), 1995 r(A). 1996 1997p / 0: 1998label(1): 1999 put_list a(1) 2000 write_atom a 2001 push_list 2002 write_atom b 2003 allocate 1 2004 push_variable y(1) 2005 callf q / 1 Y[1] 2006 move_chain y(1) a(1) r / 1 2007 2008------ Test 229 ------- 2009p :- 2010 q([A], A), 2011 r(A). 2012 2013p / 0: 2014label(1): 2015 put_list a(1) 2016 allocate 1 2017 push_variable y(1) 2018 push_nil 2019 move_callf y(1) a(2) q / 2 Y[1] 2020 move_chain y(1) a(1) r / 1 2021 2022------ Test 230 ------- 2023p :- 2024 q(A, [A]), 2025 r(A). 2026 2027p / 0: 2028label(1): 2029 put_list a(2) 2030 allocate 1 2031 push_variable y(1) 2032 push_nil 2033 move_callf y(1) a(1) q / 2 Y[1] 2034 move_chain y(1) a(1) r / 1 2035 2036------ Test 231 ------- 2037p :- 2038 q([A], A). 2039 2040p / 0: 2041label(1): 2042 put_list a(1) 2043 push_variable a(2) 2044 push_nil 2045 jmp q / 2 2046 2047------ Test 232 ------- 2048p :- 2049 q(A, [A]). 2050 2051p / 0: 2052label(1): 2053 put_list a(2) 2054 push_variable a(1) 2055 push_nil 2056 jmp q / 2 2057 2058------ Test 233 ------- 2059p(A) :- 2060 q([A], A). 2061 2062p / 1: 2063label(1): 2064 move a(1) a(2) 2065 put_list a(1) 2066 push_value a(2) 2067 push_nil 2068 jmp q / 2 2069 2070------ Test 234 ------- 2071p(A) :- 2072 q(A, [A]). 2073 2074p / 1: 2075label(1): 2076 put_list a(2) 2077 push_value a(1) 2078 push_nil 2079 jmp q / 2 2080 2081------ Test 235 ------- 2082p(A) :- 2083 q("hello", 3.4, 5_2). 2084 2085p / 1: 2086label(1): 2087 put_string a(1) "hello" 2088 put_constant a(2) 3.4 2089 put_constant a(3) 5_2 2090 jmp q / 3 2091 2092------ Test 236 ------- 2093p(A) :- 2094 q(f("hello", 3.4, 5_2)). 2095 2096p / 1: 2097label(1): 2098 put_structure a(1) f / 3 2099 push_string "hello" 2100 push_constant 3.4 2101 push_constant 5_2 2102 jmp q / 1 2103 2104------ Test 240 ------- 2105p :- 2106 p(A, B), 2107 ( 2108 p(A), 2109 r, 2110 p(B), 2111 s 2112 ; 2113 p(B), 2114 r, 2115 p(A), 2116 s 2117 ). 2118 2119p / 0: 2120label(1): 2121 allocate 2 2122 put_global_variable2 a(1) y(1) a(2) y(2) 2123 callf p / 2 Y[1,2] 2124 try_me_else 0 0 ref(3) 2125label(2): 2126 move_callf y(1) a(1) p / 1 Y[2] 2127 callf r / 0 Y[2] 2128 move_callf y(2) a(1) p / 1 Y[] 2129 chain s / 0 2130label(3): 2131 trust_me_inline 0 Y[1,2] 2132label(4): 2133 move_callf y(2) a(1) p / 1 Y[1] 2134 callf r / 0 Y[1] 2135 move_callf y(1) a(1) p / 1 Y[] 2136 chain s / 0 2137 2138------ Test jdm(1) ------- 2139p(A, B, a) :- 2140 q(A, b, f(B)). 2141 2142p / 3: 2143label(1): 2144 get_atom a(3) a 2145 put_structure a(3) f / 1 2146 push_value a(2) 2147 put_atom a(2) b 2148 jmp q / 3 2149 2150------ Test jdm(2) ------- 2151del(t(nil, A, B), A, B). 2152del(t(A, B, nil), B, A). 2153del(t(A, B, C), B, r(A, D, E)) :- 2154 delmin(C, D, E). 2155 2156INDEXES for (nondet) disjunction [2] 21571. Quality 2.5 2158 [] - [1, 2] 2159 [structure] - [1, 2] 2160 [structure, r / 3] - [1, 2, 3] 2161 [var] - [1, 2, 3] 21622. Quality 3.0 2163 [] - [] 2164 [structure] - [] 2165 [structure, t / 3] - [1, 2, 3] 2166 [var] - [1, 2, 3] 2167Branch determinisms for disjunction [2] 2168 Branch 1: try 2169 Branch 2: retry 2170 Branch 3: trust 2171del / 3: 2172label(1): 2173 functor_switch a(3) 2174 r / 3: ref(3) 2175 default: ref(16) 2176 2177label(3): 2178 try_me_else 0 3 ref(6) 2179label(4): 2180 get_structure a(1) t / 3 ref(5) 2181 write_atom nil 2182 write_value a(2) 2183 write_value a(3) 2184 ret 2185label(5): 2186 read_atom nil 2187 read_value a(2) 2188 read_value a(3) 2189 ret 2190label(6): 2191 retry_me_else 0 ref(9) 2192label(7): 2193 get_structure a(1) t / 3 ref(8) 2194 write_value a(3) 2195 write_value a(2) 2196 write_atom nil 2197 ret 2198label(8): 2199 read_value a(3) 2200 read_value a(2) 2201 read_atom nil 2202 ret 2203label(9): 2204 trust_me 0 2205label(10): 2206 get_structure a(1) t / 3 ref(11) 2207 write_variable a(4) 2208 write_value a(2) 2209 write_variable a(1) 2210 branch ref(12) 2211label(11): 2212 read_variable a(4) 2213 read_value a(2) 2214 read_variable a(1) 2215label(12): 2216 get_structure a(3) r / 3 ref(13) 2217 write_value a(4) 2218 write_variable2 a(2) a(3) 2219 jmp delmin / 3 2220label(13): 2221 read_value a(4) 2222 read_variable2 a(2) a(3) 2223 jmp delmin / 3 2224label(16): 2225 try 0 3 ref(4) 2226 trust 0 ref(7) 2227 2228------ Test jdm(3) ------- 2229dob(person(A, B, C, D), C). 2230 2231dob / 2: 2232label(1): 2233 get_structure a(1) person / 4 ref(2) 2234 write_void 2 2235 write_value a(2) 2236 write_void 2237 ret 2238label(2): 2239 read_void 2 2240 read_value a(2) 2241 ret 2242 2243------ Test jdm(4) ------- 2244qsort([A|B], C) :- 2245 split(A, B, D, E), 2246 qsort(D, F), 2247 qsort(E, G), 2248 append(F, G, C). 2249 2250qsort / 2: 2251label(1): 2252 get_list a(1) ref(2) 2253 write_variable a(1) 2254 move a(2) a(5) 2255 write_variable a(2) 2256 branch ref(3) 2257label(2): 2258 read_variable a(1) 2259 move a(2) a(5) 2260 read_variable a(2) 2261label(3): 2262 get_variable 5 a(5) y(3) 2263 put_global_variable2 a(3) y(5) a(4) y(4) 2264 callf split / 4 Y[3,4,5] 2265 put_global_variable a(2) y(2) 2266 move_callf y(5) a(1) ref(1) Y[2,3,4] 2267 put_global_variable a(2) y(1) 2268 move_callf y(4) a(1) ref(1) Y[1,2,3] 2269 move y(2) a(1) y(1) a(2) y(3) a(3) 2270 chain append / 3 2271 2272------ Test jdm(r4) ------- 2273qsort(A, [B|C]) :- 2274 split(B, C, D, E), 2275 qsort(D, F), 2276 qsort(E, G), 2277 append(F, G, A). 2278 2279qsort / 2: 2280label(1): 2281 get_list a(2) ref(2) 2282 move a(1) a(5) 2283 write_variable2 a(1) a(2) 2284 branch ref(3) 2285label(2): 2286 move a(1) a(5) 2287 read_variable2 a(1) a(2) 2288label(3): 2289 get_variable 5 a(5) y(3) 2290 put_global_variable2 a(3) y(5) a(4) y(4) 2291 callf split / 4 Y[3,4,5] 2292 put_global_variable a(2) y(2) 2293 move_callf y(5) a(1) ref(1) Y[2,3,4] 2294 put_global_variable a(2) y(1) 2295 move_callf y(4) a(1) ref(1) Y[1,2,3] 2296 move y(2) a(1) y(1) a(2) y(3) a(3) 2297 chain append / 3 2298 2299------ Test jdm(5) ------- 2300rev(A, B) :- 2301 revacc([], A, B). 2302 2303rev / 2: 2304label(1): 2305 shift a(3) a(2) a(1) 2306 put_nil a(1) 2307 jmp revacc / 3 2308 2309------ Test jdm(6) ------- 2310p(A, B, C, D) :- 2311 q(a, A, B, C, D). 2312 2313p / 4: 2314label(1): 2315 shift a(5) a(4) a(3) a(2) a(1) 2316 put_atom a(1) a 2317 jmp q / 5 2318 2319------ Test mjt(1) ------- 2320p(f(A), g(A)) :- 2321 q(a, A). 2322 2323p / 2: 2324label(1): 2325 get_structure a(1) f / 1 ref(2) 2326 move a(2) a(3) 2327 write_variable a(2) 2328 get_structure a(3) g / 1 ref(4) 2329 write_value a(2) 2330 put_atom a(1) a 2331 jmp q / 2 2332label(2): 2333 move a(2) a(3) 2334 read_variable a(2) 2335 get_structure a(3) g / 1 ref(4) 2336 write_value a(2) 2337 put_atom a(1) a 2338 jmp q / 2 2339label(4): 2340 read_value a(2) 2341 put_atom a(1) a 2342 jmp q / 2 2343 2344------ Test mjt(2) ------- 2345p(b(A, B), B, C, a(A)) :- 2346 q(c, C, A, B). 2347 2348p / 4: 2349label(1): 2350 get_structure a(1) b / 2 ref(2) 2351 shift a(5) a(4) a(2) a(3) 2352 write_variable a(3) 2353 write_value a(4) 2354 get_structure a(5) a / 1 ref(4) 2355 write_value a(3) 2356 put_atom a(1) c 2357 jmp q / 4 2358label(2): 2359 shift a(5) a(4) a(2) a(3) 2360 read_variable a(3) 2361 read_value a(4) 2362 get_structure a(5) a / 1 ref(4) 2363 write_value a(3) 2364 put_atom a(1) c 2365 jmp q / 4 2366label(4): 2367 read_value a(3) 2368 put_atom a(1) c 2369 jmp q / 4 2370 2371------ Test mjt(3) ------- 2372p(g(A), s(B, h(A)), f(B)) :- 2373 var(B), 2374 var(A), 2375 q(a, A, B). 2376 2377p / 3: 2378label(1): 2379 get_structure a(1) g / 1 ref(2) 2380 move a(2) a(4) 2381 write_variable a(2) 2382 branch ref(3) 2383label(2): 2384 move a(2) a(4) 2385 read_variable a(2) 2386label(3): 2387 get_structure a(4) s / 2 ref(5) 2388 move a(3) a(4) 2389 write_variable a(3) 2390 write_structure h / 1 2391label(4): 2392 write_value a(2) 2393 get_structure a(4) f / 1 ref(7) 2394 write_value a(3) 2395 branch ref(8) 2396label(5): 2397 move a(3) a(4) 2398 read_variable a(3) 2399 read_last_structure h / 1 ref(4) 2400 read_value a(2) 2401 get_structure a(4) f / 1 ref(7) 2402 write_value a(3) 2403 branch ref(8) 2404label(7): 2405 read_value a(3) 2406label(8): 2407 bi_var a(3) 2408 bi_var a(2) 2409 put_atom a(1) a 2410 jmp q / 3 2411 2412------ Test 300 ------- 2413p(A, B) :- 2414 p(A), 2415 +(A, B, C), 2416 -(A, D, C), 2417 q(C). 2418 2419p / 2: 2420label(1): 2421 get_variable 2 a(1) y(1) 2422 move a(2) y(2) 2423 callf p / 1 Y[1,2] 2424 move 2 y(1) a(2) 2425 bi_add a(2) a(3) a(1) 16 2426 put_variable a(3) 2427 bi_sub a(2) a(3) a(2) 16 2428 get_value a(2) a(1) 2429 chain q / 1 2430 2431------ Test 301 ------- 2432p(A, B) :- 2433 p(A), 2434 r(A, B, C), 2435 q(C). 2436 2437p / 2: 2438label(1): 2439 get_variable 3 a(1) y(2) 2440 move a(2) y(3) 2441 callf p / 1 Y[2,3] 2442 put_global_variable a(3) y(1) 2443 move 2 y(2) a(1) 2444 callf r / 3 Y[1] 2445 move_chain y(1) a(1) q / 1 2446 2447------ Test 302 ------- 2448p(A, B) :- 2449 p(B), 2450 r(A, B, C), 2451 q(C). 2452 2453p / 2: 2454label(1): 2455 get_variable 3 a(1) y(2) 2456 move a(2) y(3) 2457 move a(2) a(1) 2458 callf p / 1 Y[2,3] 2459 put_global_variable a(3) y(1) 2460 move 2 y(2) a(1) 2461 callf r / 3 Y[1] 2462 move_chain y(1) a(1) q / 1 2463 2464------ Test 303 ------- 2465p :- 2466 q, 2467 A = 1, 2468 B = 3, 2469 p(C), 2470 r(A, C, B). 2471 2472p / 0: 2473label(1): 2474 allocate 3 2475 callf q / 0 Y[] 2476 put_integer a(2) 1 2477 move a(2) y(1) 2478 put_integer a(3) 3 2479 move a(3) y(2) 2480 put_global_variable_callf a(1) y(3) p / 1 Y[1,2,3] 2481 move y(1) a(1) y(3) a(2) y(2) a(3) 2482 chain r / 3 2483 2484------ Test 304 ------- 2485p :- 2486 q, 2487 A = f(B), 2488 a(A, B). 2489 2490p / 0: 2491label(1): 2492 allocate 0 2493 callf q / 0 Y[] 2494 put_structure a(1) f / 1 2495 push_variable a(2) 2496 chain a / 2 2497 2498------ Test 305 ------- 2499p(A, B) :- 2500 C = 1, 2501 A = B, 2502 q(B, C). 2503 2504p / 2: 2505label(1): 2506 shift a(3) a(1) a(2) 2507 put_integer a(2) 1 2508 get_value a(3) a(1) 2509 jmp q / 2 2510 2511------ Test 306 ------- 2512p1(A) :- 2513 A = 1. 2514 2515p1 / 1: 2516label(1): 2517 get_integer a(1) 1 2518 ret 2519 2520------ Test 307 ------- 2521p2(A) :- 2522 1 = A. 2523 2524p2 / 1: 2525label(1): 2526 get_integer a(1) 1 2527 ret 2528 2529------ Test 308 ------- 2530p3(A) :- 2531 A = 1, 2532 p1(A), 2533 p1(A). 2534 2535p3 / 1: 2536label(1): 2537 get_integer a(1) 1 2538 get_variable 1 a(1) y(1) 2539 callf p1 / 1 Y[1] 2540 move_chain y(1) a(1) p1 / 1 2541 2542------ Test 309 ------- 2543p4(A) :- 2544 1 = A, 2545 p1(A), 2546 p1(A). 2547 2548p4 / 1: 2549label(1): 2550 get_integer a(1) 1 2551 get_variable 1 a(1) y(1) 2552 callf p1 / 1 Y[1] 2553 move_chain y(1) a(1) p1 / 1 2554 2555------ Test 310 ------- 2556p5(f(A)) :- 2557 A = 1, 2558 p1(A), 2559 p1(A). 2560 2561p5 / 1: 2562label(1): 2563 allocate 1 2564 get_structure a(1) f / 1 ref(2) 2565 write_variable y(1) 2566 branch ref(3) 2567label(2): 2568 read_variable y(1) 2569label(3): 2570 move y(1) a(1) 2571 get_integer a(1) 1 2572 callf p1 / 1 Y[1] 2573 move_chain y(1) a(1) p1 / 1 2574 2575------ Test 311 ------- 2576p5a(f(A)) :- 2577 p1(A), 2578 A = 1, 2579 p1(A). 2580 2581p5a / 1: 2582label(1): 2583 allocate 1 2584 get_structure a(1) f / 1 ref(2) 2585 write_variable y(1) 2586 branch ref(3) 2587label(2): 2588 read_variable y(1) 2589label(3): 2590 move_callf y(1) a(1) p1 / 1 Y[1] 2591 move y(1) a(1) 2592 get_integer a(1) 1 2593 chain p1 / 1 2594 2595------ Test 312 ------- 2596p6(f(A)) :- 2597 1 = A, 2598 p1(A), 2599 p1(A). 2600 2601p6 / 1: 2602label(1): 2603 allocate 1 2604 get_structure a(1) f / 1 ref(2) 2605 write_variable y(1) 2606 branch ref(3) 2607label(2): 2608 read_variable y(1) 2609label(3): 2610 move y(1) a(1) 2611 get_integer a(1) 1 2612 callf p1 / 1 Y[1] 2613 move_chain y(1) a(1) p1 / 1 2614 2615------ Test 313 ------- 2616p6a(f(A)) :- 2617 p1(A), 2618 1 = A, 2619 p1(A). 2620 2621p6a / 1: 2622label(1): 2623 allocate 1 2624 get_structure a(1) f / 1 ref(2) 2625 write_variable y(1) 2626 branch ref(3) 2627label(2): 2628 read_variable y(1) 2629label(3): 2630 move_callf y(1) a(1) p1 / 1 Y[1] 2631 move y(1) a(1) 2632 get_integer a(1) 1 2633 chain p1 / 1 2634 2635------ Test 314 ------- 2636p7(f(A)) :- 2637 A = 1, 2638 p1(A). 2639 2640p7 / 1: 2641label(1): 2642 get_structure a(1) f / 1 ref(2) 2643 write_variable a(1) 2644 get_integer a(1) 1 2645 jmp p1 / 1 2646label(2): 2647 read_variable a(1) 2648 get_integer a(1) 1 2649 jmp p1 / 1 2650 2651------ Test 315 ------- 2652p8(f(A)) :- 2653 1 = A, 2654 p1(A). 2655 2656p8 / 1: 2657label(1): 2658 get_structure a(1) f / 1 ref(2) 2659 write_variable a(1) 2660 get_integer a(1) 1 2661 jmp p1 / 1 2662label(2): 2663 read_variable a(1) 2664 get_integer a(1) 1 2665 jmp p1 / 1 2666 2667------ Test 316 ------- 2668p9(A) :- 2669 B = 1, 2670 p1(B), 2671 p1(B), 2672 B = A. 2673 2674p9 / 1: 2675label(1): 2676 allocate 2 2677 move a(1) a(2) 2678 put_integer a(1) 1 2679 move a(1) y(2) a(2) y(1) 2680 callf p1 / 1 Y[1,2] 2681 move_callf y(2) a(1) p1 / 1 Y[1,2] 2682 get_value y(1) y(2) 2683 exit 2684 2685------ Test 317 ------- 2686p9a(A) :- 2687 p1(B), 2688 C = 1, 2689 p1(C), 2690 p1(C), 2691 C = A. 2692 2693p9a / 1: 2694label(1): 2695 get_variable 2 a(1) y(2) 2696 put_variable a(1) 2697 callf p1 / 1 Y[2] 2698 put_integer a(1) 1 2699 move a(1) y(1) 2700 callf p1 / 1 Y[1,2] 2701 move_callf y(1) a(1) p1 / 1 Y[1,2] 2702 get_value y(1) y(2) 2703 exit 2704 2705------ Test 318 ------- 2706p10(A) :- 2707 1 = B, 2708 p1(B), 2709 p1(B), 2710 B = A. 2711 2712p10 / 1: 2713label(1): 2714 allocate 2 2715 move a(1) a(2) 2716 put_integer a(1) 1 2717 move a(1) y(2) a(2) y(1) 2718 callf p1 / 1 Y[1,2] 2719 move_callf y(2) a(1) p1 / 1 Y[1,2] 2720 get_value y(1) y(2) 2721 exit 2722 2723------ Test 319 ------- 2724p10a(A) :- 2725 p1(B), 2726 1 = C, 2727 p1(C), 2728 C = A. 2729 2730p10a / 1: 2731label(1): 2732 get_variable 2 a(1) y(2) 2733 put_variable a(1) 2734 callf p1 / 1 Y[2] 2735 put_integer a(1) 1 2736 move a(1) y(1) 2737 callf p1 / 1 Y[1,2] 2738 get_value y(1) y(2) 2739 exit 2740 2741------ Test 320 ------- 2742p11(A) :- 2743 B = 1, 2744 call(true), 2745 B = A. 2746 2747p11 / 1: 2748label(1): 2749 allocate 2 2750 put_integer a(3) 1 2751 move a(3) y(2) a(1) y(1) 2752 put_atom a(1) true 2753 put_module a(2) eclipse 2754 callf sepia_kernel : call_ / 2 Y[1,2] 2755 get_value y(1) y(2) 2756 exit 2757 2758------ Test 321 ------- 2759p12(A, B, C) :- 2760 D = 1, 2761 E = 2, 2762 F = 3, 2763 call(true), 2764 A = D, 2765 B = E, 2766 C = F. 2767 2768p12 / 3: 2769label(1): 2770 allocate 6 2771 put_integer a(4) 1 2772 move a(4) y(4) 2773 put_integer a(5) 2 2774 move a(5) y(5) 2775 put_integer a(6) 3 2776 move a(6) y(6) 2777 move 3 a(1) y(1) 2778 put_atom a(1) true 2779 put_module a(2) eclipse 2780 callf sepia_kernel : call_ / 2 Y[1,2,3,4,5,6] 2781 get_value y(1) y(4) 2782 get_value y(2) y(5) 2783 get_value y(3) y(6) 2784 exit 2785 2786------ Test 322 ------- 2787p13(A, B) :- 2788 C = 1, 2789 D = 2, 2790 E = 3, 2791 current_op(F, G, H), 2792 A = C, 2793 B = D. 2794 2795p13 / 2: 2796label(1): 2797 allocate 4 2798 put_integer a(5) 1 2799 move a(5) y(3) 2800 put_integer a(6) 2 2801 move a(6) y(4) 2802 move 2 a(1) y(1) 2803 put_variable2 a(1) a(2) 2804 put_variable a(3) 2805 put_module a(4) eclipse 2806 callf sepia_kernel : current_op_body / 4 Y[1,2,3,4] 2807 get_value y(1) y(3) 2808 get_value y(2) y(4) 2809 exit 2810 2811------ Test 323 ------- 2812b1 :- 2813 A = s(B), 2814 eq(B, C), 2815 A = s(1), 2816 C = 1. 2817 2818b1 / 0: 2819label(1): 2820 allocate 2 2821 put_structure a(3) s / 1 2822 push_variable a(1) 2823 move a(3) y(1) 2824 put_global_variable_callf a(2) y(2) eq / 2 Y[1,2] 2825 move y(1) a(1) 2826 get_structure a(1) s / 1 ref(2) 2827 write_integer 1 2828 branch ref(3) 2829label(2): 2830 read_integer 1 2831label(3): 2832 move y(2) a(1) 2833 get_integer a(1) 1 2834 exit 2835 2836------ Test 324 ------- 2837do_x(A) :- 2838 ( 2839 A = B 2840 ; 2841 A = [1|B] 2842 ), 2843 do_x(B). 2844 2845INDEXES for (nondet) disjunction [2] 28461. Quality 1.5 2847 [] - [1] 2848 [list] - [1, 2] 2849 [var] - [1, 2] 2850Branch determinisms for disjunction [2] 2851 Branch 1: try 2852 Branch 2: trust 2853do_x / 1: 2854label(1): 2855 list_switch a(1) ref(2) ref(3) ref(3) 2856label(2): 2857 try_me_else 0 1 ref(4) 2858label(3): 2859 get_variable 1 a(1) y(1) 2860 move_chain y(1) a(1) ref(1) 2861label(4): 2862 trust_me 0 2863label(5): 2864 allocate 1 2865 get_list a(1) ref(6) 2866 write_integer 1 2867 write_variable y(1) 2868 move_chain y(1) a(1) ref(1) 2869label(6): 2870 read_integer 1 2871 read_variable y(1) 2872 move_chain y(1) a(1) ref(1) 2873 2874------ Test u(1) ------- 2875p(foo(A, B, C)) :- 2876 q(B), 2877 r(C). 2878 2879p / 1: 2880label(1): 2881 allocate 1 2882 get_structure a(1) foo / 3 ref(2) 2883 write_void 2884 write_variable2 a(1) y(1) 2885 branch ref(3) 2886label(2): 2887 read_void 2888 read_variable2 a(1) y(1) 2889label(3): 2890 callf q / 1 Y[1] 2891 move_chain y(1) a(1) r / 1 2892 2893------ Test ana(1) ------- 2894p :- 2895 q, 2896 A = 1, 2897 B = 3, 2898 p(A). 2899 2900p / 0: 2901label(1): 2902 allocate 0 2903 callf q / 0 Y[] 2904 put_integer a(1) 1 2905 chain p / 1 2906 2907------ Test ana(2) ------- 2908p :- 2909 A = 1, 2910 A = B. 2911 2912p / 0: 2913label(1): 2914 put_integer a(1) 1 2915 ret 2916 2917------ Test ana(3) ------- 2918p :- 2919 A = B. 2920 2921p / 0: 2922label(1): 2923 ret 2924 2925------ Test ana(4) ------- 2926p :- 2927 A = 3, 2928 B = A. 2929 2930p / 0: 2931label(1): 2932 put_integer a(1) 3 2933 ret 2934 2935------ Test ana(5) ------- 2936p :- 2937 A = 3, 2938 q, 2939 A = 4, 2940 r. 2941 2942WARNING: calling =/2 will always fail 2943p / 0: 2944label(1): 2945 allocate 1 2946 put_integer a(1) 3 2947 move a(1) y(1) 2948 callf q / 0 Y[1] 2949 move y(1) a(1) 2950 get_integer a(1) 4 2951 chain r / 0 2952 2953------ Test ana(6) ------- 2954p :- 2955 A = 3, 2956 q, 2957 B = A, 2958 r, 2959 B = 4. 2960 2961WARNING: calling =/2 will always fail 2962p / 0: 2963label(1): 2964 allocate 2 2965 put_integer a(1) 3 2966 move a(1) y(2) 2967 callf q / 0 Y[2] 2968 move y(2) y(1) 2969 callf r / 0 Y[1] 2970 move y(1) a(1) 2971 get_integer a(1) 4 2972 exit 2973 2974------ Test ana(7) ------- 2975p :- 2976 A = f(B, C), 2977 q, 2978 A = f(D, E), 2979 r. 2980 2981p / 0: 2982label(1): 2983 allocate 1 2984 put_structure a(1) f / 2 2985 push_void 2 2986 move a(1) y(1) 2987 callf q / 0 Y[1] 2988 move y(1) a(1) 2989 get_structure a(1) f / 2 ref(2) 2990 write_void 2 2991label(2): 2992 chain r / 0 2993 2994------ Test ana(8) ------- 2995p :- 2996 integer(A), 2997 ( 2998 A = 1 2999 ; 3000 A = 2 3001 ), 3002 q. 3003 3004INDEXES for (nondet) disjunction [2] 30051. Quality 1.3 3006 [] - [] 3007 [var] - [1, 2] 3008 [integer] - [] 3009 [integer, 1] - [1] 3010 [integer, 2] - [2] 3011Branch determinisms for disjunction [2] 3012 Branch 1: try 3013 Branch 2: trust 3014p / 0: 3015label(1): 3016 put_variable a(1) 3017 bi_integer a(1) 3018 integer_switch a(1) 3019 1: ref(8) 3020 2: ref(9) 3021 default: ref(fail) 3022 3023label(3): 3024 try_me_else 0 1 ref(5) 3025label(4): 3026 get_integer a(1) 1 3027label(8): 3028 jmp q / 0 3029label(5): 3030 trust_me 0 3031label(6): 3032 get_integer a(1) 2 3033label(9): 3034 jmp q / 0 3035 3036------ Test ana(9) ------- 3037p(A, B) :- 3038 f(a, B) = f(A, b), 3039 q. 3040 3041p / 2: 3042label(1): 3043 get_atom a(1) a 3044 get_atom a(2) b 3045 jmp q / 0 3046 3047------ Test idx(1) ------- 3048p :- 3049 p(A), 3050 ( 3051 A = 1, 3052 p1 3053 ; 3054 A = 2, 3055 p2 3056 ). 3057 3058INDEXES for (nondet) disjunction [3] 30591. Quality 1.3 3060 [] - [] 3061 [var] - [1, 2] 3062 [integer] - [] 3063 [integer, 1] - [1] 3064 [integer, 2] - [2] 3065Branch determinisms for disjunction [3] 3066 Branch 1: try 3067 Branch 2: trust 3068p / 0: 3069label(1): 3070 allocate 1 3071 put_global_variable_callf a(1) y(1) p / 1 Y[1] 3072 integer_switch y(1) 3073 1: ref(4) 3074 2: ref(6) 3075 default: ref(fail) 3076 3077label(3): 3078 try_me_else 0 0 ref(5) 3079label(4): 3080 move y(1) a(1) 3081 get_integer a(1) 1 3082 chain p1 / 0 3083label(5): 3084 trust_me_inline 0 Y[1] 3085label(6): 3086 move y(1) a(1) 3087 get_integer a(1) 2 3088 chain p2 / 0 3089 3090------ Test idx(2) ------- 3091p :- 3092 p(A, B), 3093 ( 3094 B = a, 3095 A = 1, 3096 p1 3097 ; 3098 A = 2, 3099 B = b, 3100 p2 3101 ). 3102 3103INDEXES for (nondet) disjunction [3] 31041. Quality 1.3 3105 [] - [] 3106 [var] - [1, 2] 3107 [integer] - [] 3108 [integer, 1] - [1] 3109 [integer, 2] - [2] 31102. Quality 1.3 3111 [] - [] 3112 [atom] - [] 3113 [atom, a] - [1] 3114 [atom, b] - [2] 3115 [var] - [1, 2] 3116Branch determinisms for disjunction [3] 3117 Branch 1: try 3118 Branch 2: trust 3119p / 0: 3120label(1): 3121 allocate 2 3122 put_global_variable2 a(1) y(1) a(2) y(2) 3123 callf p / 2 Y[1,2] 3124 integer_switch y(1) 3125 1: ref(5) 3126 2: ref(7) 3127 default: ref(fail) 3128 3129 atom_switch y(2) 3130 a: ref(5) 3131 b: ref(7) 3132 default: ref(fail) 3133 3134label(4): 3135 try_me_else 0 0 ref(6) 3136label(5): 3137 move y(2) a(1) 3138 get_atom a(1) a 3139 move y(1) a(1) 3140 get_integer a(1) 1 3141 chain p1 / 0 3142label(6): 3143 trust_me_inline 0 Y[1,2] 3144label(7): 3145 move y(1) a(1) 3146 get_integer a(1) 2 3147 move y(2) a(1) 3148 get_atom a(1) b 3149 chain p2 / 0 3150 3151------ Test idx(3) ------- 3152p(A, B) :- 3153 ( 3154 B = a, 3155 A = 1, 3156 p1 3157 ; 3158 ( 3159 A = 2, 3160 B = b, 3161 p2 3162 ; 3163 B = c, 3164 p3 3165 ) 3166 ). 3167 3168INDEXES for (nondet) disjunction [2] 31691. Quality 1.5 3170 [] - [] 3171 [atom] - [] 3172 [atom, a] - [1] 3173 [atom, b] - [2] 3174 [atom, c] - [3] 3175 [var] - [1, 2, 3] 31762. Quality 2.0 3177 [] - [3] 3178 [var] - [1, 2, 3] 3179 [integer] - [3] 3180 [integer, 1] - [1, 3] 3181 [integer, 2] - [2, 3] 3182Branch determinisms for disjunction [2] 3183 Branch 1: try 3184 Branch 2: retry 3185 Branch 3: trust 3186p / 2: 3187label(1): 3188 atom_switch a(2) 3189 a: ref(12) 3190 b: ref(6) 3191 c: ref(13) 3192 default: ref(fail) 3193 3194 integer_switch a(1) 3195 1: ref(10) 3196 2: ref(11) 3197 default: ref(8) 3198 3199label(3): 3200 try_me_else 0 2 ref(5) 3201label(4): 3202 get_atom a(2) a 3203label(12): 3204 get_integer a(1) 1 3205 jmp p1 / 0 3206label(5): 3207 retry_me_else 0 ref(7) 3208label(6): 3209 get_integer a(1) 2 3210 get_atom a(2) b 3211 jmp p2 / 0 3212label(7): 3213 trust_me 0 3214label(8): 3215 get_atom a(2) c 3216label(13): 3217 jmp p3 / 0 3218label(10): 3219 try 0 2 ref(4) 3220 trust 0 ref(8) 3221label(11): 3222 try 0 2 ref(6) 3223 trust 0 ref(8) 3224 3225------ Test idx(4) ------- 3226p(A, B) :- 3227 ( 3228 B = a, 3229 A = 1, 3230 p1 3231 ; 3232 ( 3233 integer(A), 3234 B = b, 3235 p2 3236 ; 3237 number(A), 3238 p3 3239 ) 3240 ). 3241 3242INDEXES for (nondet) disjunction [2] 32431. Quality 1.8 3244 [] - [] 3245 [var] - [1] 3246 [rational] - [3] 3247 [breal] - [3] 3248 [bignum] - [2, 3] 3249 [integer] - [2, 3] 3250 [integer, 1] - [1, 2, 3] 3251 [double] - [3] 32522. Quality 2.0 3253 [] - [3] 3254 [atom] - [3] 3255 [atom, a] - [1, 3] 3256 [atom, b] - [2, 3] 3257 [var] - [1, 2, 3] 3258Branch determinisms for disjunction [2] 3259 Branch 1: try 3260 Branch 2: retry 3261 Branch 3: trust 3262p / 2: 3263label(1): 3264 switch_on_type a(1) 3265 meta: ref(4) 3266 []: ref(fail) 3267 atom: ref(fail) 3268 bignum: ref(10) 3269 breal: ref(13) 3270 double: ref(13) 3271 goal: ref(fail) 3272 handle: ref(fail) 3273 integer: ref(11) 3274 list: ref(fail) 3275 rational: ref(13) 3276 string: ref(fail) 3277 structure: ref(fail) 3278 3279 branch ref(4) 3280label(2): 3281 atom_switch a(2) 3282 a: ref(12) 3283 b: ref(10) 3284 default: ref(8) 3285 3286label(3): 3287 try_me_else 0 2 ref(5) 3288label(4): 3289 get_atom a(2) a 3290 get_integer a(1) 1 3291 jmp p1 / 0 3292label(5): 3293 retry_me_else 0 ref(7) 3294label(6): 3295 bi_integer a(1) 3296 get_atom a(2) b 3297 jmp p2 / 0 3298label(7): 3299 trust_me 0 3300label(8): 3301 bi_number a(1) 3302label(13): 3303 jmp p3 / 0 3304label(10): 3305 try 0 2 ref(6) 3306 trust 0 ref(8) 3307label(11): 3308 integer_switch a(1) 3309 1: ref(2) 3310 default: ref(10) 3311 3312label(12): 3313 try 0 2 ref(4) 3314 trust 0 ref(8) 3315 3316------ Test idx(5) ------- 3317p(A) :- 3318 ( 3319 A = 1, 3320 p1 3321 ; 3322 ( 3323 A = 2, 3324 p2 3325 ; 3326 ( 3327 integer(A), 3328 p3 3329 ; 3330 number(A), 3331 p4 3332 ) 3333 ) 3334 ). 3335 3336INDEXES for (nondet) disjunction [2] 33371. Quality 2.2 3338 [] - [] 3339 [var] - [1, 2] 3340 [rational] - [4] 3341 [breal] - [4] 3342 [bignum] - [3, 4] 3343 [integer] - [3, 4] 3344 [integer, 1] - [1, 3, 4] 3345 [integer, 2] - [2, 3, 4] 3346 [double] - [4] 3347Branch determinisms for disjunction [2] 3348 Branch 1: try 3349 Branch 2: retry 3350 Branch 3: retry 3351 Branch 4: trust 3352p / 1: 3353label(1): 3354 switch_on_type a(1) 3355 meta: ref(14) 3356 []: ref(fail) 3357 atom: ref(fail) 3358 bignum: ref(11) 3359 breal: ref(16) 3360 double: ref(16) 3361 goal: ref(fail) 3362 handle: ref(fail) 3363 integer: ref(15) 3364 list: ref(fail) 3365 rational: ref(16) 3366 string: ref(fail) 3367 structure: ref(fail) 3368 3369label(14): 3370 try 0 1 ref(3) 3371 trust 0 ref(5) 3372label(3): 3373 get_integer a(1) 1 3374 jmp p1 / 0 3375label(5): 3376 get_integer a(1) 2 3377 jmp p2 / 0 3378label(7): 3379 bi_integer a(1) 3380 jmp p3 / 0 3381label(9): 3382 bi_number a(1) 3383label(16): 3384 jmp p4 / 0 3385label(11): 3386 try 0 1 ref(7) 3387 trust 0 ref(9) 3388label(12): 3389 try 0 1 ref(3) 3390 retry 0 ref(7) 3391 trust 0 ref(9) 3392label(13): 3393 try 0 1 ref(5) 3394 retry 0 ref(7) 3395 trust 0 ref(9) 3396label(15): 3397 integer_switch a(1) 3398 1: ref(12) 3399 2: ref(13) 3400 default: ref(11) 3401 3402 3403------ Test idx(6) ------- 3404p :- 3405 p(A, B), 3406 ( 3407 B == a, 3408 A = 1, 3409 p1 3410 ; 3411 A = 2, 3412 B == b, 3413 p2 3414 ). 3415 3416INDEXES for (semidet) disjunction [3] 34171. Quality 1.0 3418 [] - [] 3419 [var] - [2] 3420 [atom] - [] 3421 [atom, a] - [1] 3422 [atom, b] - [2] 34232. Quality 1.3 3424 [] - [] 3425 [var] - [1, 2] 3426 [integer] - [] 3427 [integer, 1] - [1] 3428 [integer, 2] - [2] 3429Branch determinisms for disjunction [3] 3430 Branch 1: det 3431 Branch 2: det 3432p / 0: 3433label(1): 3434 allocate 2 3435 put_global_variable2 a(1) y(1) a(2) y(2) 3436 callf p / 2 Y[1,2] 3437 atom_switch y(2) 3438 a: ref(5) 3439 b: ref(7) 3440 default: ref(fail) 3441 3442label(7): 3443 move y(1) a(1) 3444 get_integer a(1) 2 3445 move y(2) a(1) 3446 in_get_atom a(1) b 3447 chain p2 / 0 3448label(5): 3449 move y(2) a(1) 3450 in_get_atom a(1) a 3451 move y(1) a(1) 3452 get_integer a(1) 1 3453 chain p1 / 0 3454 3455------ Test idx(7) ------- 3456p(A) :- 3457 ( 3458 A = [], 3459 p1 3460 ; 3461 A = [B|C], 3462 p2 3463 ). 3464 3465INDEXES for (nondet) disjunction [2] 34661. Quality 1.3 3467 [] - [] 3468 [list] - [2] 3469 [[]] - [1] 3470 [var] - [1, 2] 3471Branch determinisms for disjunction [2] 3472 Branch 1: try 3473 Branch 2: trust 3474p / 1: 3475label(1): 3476 list_switch a(1) ref(6) ref(8) ref(fail) 3477label(2): 3478 try_me_else 0 1 ref(4) 3479label(3): 3480 get_nil a(1) 3481label(8): 3482 jmp p1 / 0 3483label(4): 3484 trust_me 0 3485label(5): 3486 get_list a(1) ref(6) 3487 write_void 2 3488label(6): 3489 jmp p2 / 0 3490 3491------ Test idx(8) ------- 3492p(A) :- 3493 ( 3494 var(A), 3495 !, 3496 p 3497 ; 3498 q 3499 ). 3500 3501INDEXES for (semidet) disjunction [2] 35021. Quality 1.0 3503 [] - [2] 3504 [var] - [1] 3505Branch determinisms for disjunction [2] 3506 Branch 1: det 3507 Branch 2: det 3508p / 1: 3509label(1): 3510 switch_on_type a(1) 3511 meta: ref(7) 3512 []: ref(5) 3513 atom: ref(5) 3514 bignum: ref(5) 3515 breal: ref(5) 3516 double: ref(5) 3517 goal: ref(5) 3518 handle: ref(5) 3519 integer: ref(5) 3520 list: ref(5) 3521 rational: ref(5) 3522 string: ref(5) 3523 structure: ref(5) 3524 3525 branch ref(7) 3526label(3): 3527 bi_var a(1) 3528label(7): 3529 jmp p / 0 3530label(5): 3531 jmp q / 0 3532 3533------ Test idx(9) ------- 3534p(A) :- 3535 ( 3536 A = 3.1, 3537 p 3538 ; 3539 A = 9.9, 3540 q 3541 ). 3542 3543INDEXES for (nondet) disjunction [2] 35441. Quality 2.0 3545 [] - [] 3546 [var] - [1, 2] 3547 [double] - [1, 2] 3548Branch determinisms for disjunction [2] 3549 Branch 1: try 3550 Branch 2: trust 3551p / 1: 3552label(1): 3553 try_me_else 0 1 ref(3) 3554label(2): 3555 get_constant a(1) 3.1 3556 jmp p / 0 3557label(3): 3558 trust_me 0 3559label(4): 3560 get_constant a(1) 9.9 3561 jmp q / 0 3562 3563------ Test idx(10) ------- 3564p(A) :- 3565 ( 3566 A = "foo", 3567 p 3568 ; 3569 ( 3570 A = "bar", 3571 q 3572 ; 3573 r 3574 ) 3575 ). 3576 3577INDEXES for (nondet) disjunction [2] 35781. Quality 2.0 3579 [] - [3] 3580 [var] - [1, 2, 3] 3581 [string] - [1, 2, 3] 3582Branch determinisms for disjunction [2] 3583 Branch 1: try 3584 Branch 2: retry 3585 Branch 3: trust 3586p / 1: 3587label(1): 3588 switch_on_type a(1) 3589 meta: ref(2) 3590 []: ref(7) 3591 atom: ref(7) 3592 bignum: ref(7) 3593 breal: ref(7) 3594 double: ref(7) 3595 goal: ref(7) 3596 handle: ref(7) 3597 integer: ref(7) 3598 list: ref(7) 3599 rational: ref(7) 3600 string: ref(2) 3601 structure: ref(7) 3602 3603label(2): 3604 try_me_else 0 1 ref(4) 3605label(3): 3606 get_string a(1) "foo" 3607 jmp p / 0 3608label(4): 3609 retry_me_else 0 ref(6) 3610label(5): 3611 get_string a(1) "bar" 3612 jmp q / 0 3613label(6): 3614 trust_me 0 3615label(7): 3616 jmp r / 0 3617 3618------ Test idx(11) ------- 3619p(A) :- 3620 ( 3621 A = f(1), 3622 p 3623 ; 3624 ( 3625 A = g(1, 2), 3626 q 3627 ; 3628 r 3629 ) 3630 ). 3631 3632INDEXES for (nondet) disjunction [2] 36331. Quality 2.0 3634 [] - [3] 3635 [structure] - [3] 3636 [structure, g / 2] - [2, 3] 3637 [structure, f / 1] - [1, 3] 3638 [var] - [1, 2, 3] 3639Branch determinisms for disjunction [2] 3640 Branch 1: try 3641 Branch 2: retry 3642 Branch 3: trust 3643p / 1: 3644label(1): 3645 functor_switch a(1) 3646 g / 2: ref(14) 3647 f / 1: ref(15) 3648 default: ref(12) 3649 3650label(3): 3651 try_me_else 0 1 ref(7) 3652label(4): 3653 get_structure a(1) f / 1 ref(5) 3654 write_integer 1 3655 jmp p / 0 3656label(5): 3657 read_integer 1 3658 jmp p / 0 3659label(7): 3660 retry_me_else 0 ref(11) 3661label(8): 3662 get_structure a(1) g / 2 ref(9) 3663 write_integer2 1 2 3664 jmp q / 0 3665label(9): 3666 read_integer 1 3667 read_integer 2 3668 jmp q / 0 3669label(11): 3670 trust_me 0 3671label(12): 3672 jmp r / 0 3673label(14): 3674 try 0 1 ref(8) 3675 trust 0 ref(12) 3676label(15): 3677 try 0 1 ref(4) 3678 trust 0 ref(12) 3679 3680------ Test idx(12) ------- 3681p(A) :- 3682 ( 3683 A = [], 3684 p 3685 ; 3686 r 3687 ). 3688 3689INDEXES for (nondet) disjunction [2] 36901. Quality 1.5 3691 [] - [2] 3692 [[]] - [1, 2] 3693 [var] - [1, 2] 3694Branch determinisms for disjunction [2] 3695 Branch 1: try 3696 Branch 2: trust 3697p / 1: 3698label(1): 3699 list_switch a(1) ref(5) ref(2) ref(5) 3700label(2): 3701 try_me_else 0 1 ref(4) 3702label(3): 3703 get_nil a(1) 3704 jmp p / 0 3705label(4): 3706 trust_me 0 3707label(5): 3708 jmp r / 0 3709 3710------ Test idx(13) ------- 3711p(A) :- 3712 ( 3713 A = [] 3714 -> 3715 p 3716 ; 3717 r 3718 ). 3719 3720INDEXES for (semidet) disjunction [2] 37211. Quality 1.0 3722 [] - [2] 3723 [[]] - [1] 3724 [var] - [1] 3725Branch determinisms for disjunction [2] 3726 Branch 1: det 3727 Branch 2: det 3728p / 1: 3729label(1): 3730 list_switch a(1) ref(5) ref(7) ref(5) 3731label(3): 3732 get_nil a(1) 3733label(7): 3734 jmp p / 0 3735label(5): 3736 jmp r / 0 3737 3738------ Test idx(14) ------- 3739p :- 3740 p(A, B), 3741 ( 3742 a == B, 3743 1 = A, 3744 p1 3745 ; 3746 2 = A, 3747 b == B, 3748 p2 3749 ). 3750 3751INDEXES for (semidet) disjunction [3] 37521. Quality 1.0 3753 [] - [] 3754 [var] - [2] 3755 [atom] - [] 3756 [atom, a] - [1] 3757 [atom, b] - [2] 37582. Quality 1.3 3759 [] - [] 3760 [var] - [1, 2] 3761 [integer] - [] 3762 [integer, 1] - [1] 3763 [integer, 2] - [2] 3764Branch determinisms for disjunction [3] 3765 Branch 1: det 3766 Branch 2: det 3767p / 0: 3768label(1): 3769 allocate 2 3770 put_global_variable2 a(1) y(1) a(2) y(2) 3771 callf p / 2 Y[1,2] 3772 atom_switch y(2) 3773 a: ref(5) 3774 b: ref(7) 3775 default: ref(fail) 3776 3777label(7): 3778 move y(1) a(1) 3779 get_integer a(1) 2 3780 move y(2) a(1) 3781 in_get_atom a(1) b 3782 chain p2 / 0 3783label(5): 3784 move y(2) a(1) 3785 in_get_atom a(1) a 3786 move y(1) a(1) 3787 get_integer a(1) 1 3788 chain p1 / 0 3789 3790------ Test idx(15) ------- 3791p :- 3792 p(A, B), 3793 ( 3794 a == B, 3795 1 = A, 3796 p1 3797 ; 3798 ( 3799 2 = A, 3800 b == B, 3801 p2 3802 ; 3803 A == B, 3804 p3 3805 ) 3806 ). 3807 3808INDEXES for (nondet) disjunction [3] 38091. Quality 1.7 3810 [] - [3] 3811 [var] - [2, 3] 3812 [atom] - [3] 3813 [atom, a] - [1, 3] 3814 [atom, b] - [2, 3] 38152. Quality 2.0 3816 [] - [3] 3817 [var] - [1, 2, 3] 3818 [integer] - [3] 3819 [integer, 1] - [1, 3] 3820 [integer, 2] - [2, 3] 3821Branch determinisms for disjunction [3] 3822 Branch 1: try 3823 Branch 2: try 3824 Branch 3: trust 3825p / 0: 3826label(1): 3827 allocate 2 3828 put_global_variable2 a(1) y(1) a(2) y(2) 3829 callf p / 2 Y[1,2] 3830 atom_switch y(2) 3831 a: ref(11) 3832 b: ref(12) 3833 default: ref(9) 3834 3835label(12): 3836 try 0 0 ref(7) 3837 trust_inline 0 ref(9) Y[1,2] 3838label(5): 3839 move y(2) a(1) 3840 in_get_atom a(1) a 3841 move y(1) a(1) 3842 get_integer a(1) 1 3843 chain p1 / 0 3844label(7): 3845 move y(1) a(1) 3846 get_integer a(1) 2 3847 move y(2) a(1) 3848 in_get_atom a(1) b 3849 chain p2 / 0 3850label(9): 3851 move 2 y(1) a(1) 3852 get_matched_value a(1) a(2) 3853 chain p3 / 0 3854label(11): 3855 try 0 0 ref(5) 3856 trust_inline 0 ref(9) Y[1,2] 3857 3858------ Test idx(16) ------- 3859p(A) :- 3860 ( 3861 var(B), 3862 !, 3863 p 3864 ; 3865 q 3866 ). 3867 3868p / 1: 3869label(1): 3870 savecut a(1) 3871 try_me_else 0 1 ref(3) 3872label(2): 3873 put_variable a(2) 3874 bi_var a(2) 3875 cut a(1) 3876 jmp p / 0 3877label(3): 3878 trust_me 0 3879label(4): 3880 jmp q / 0 3881 3882------ Test idx(20) ------- 3883p(A) :- 3884 ( 3885 A == [], 3886 p 3887 ; 3888 A == [a], 3889 q 3890 ). 3891 3892INDEXES for (semidet) disjunction [2] 38931. Quality 0.7 3894 [] - [] 3895 [list] - [2] 3896 [[]] - [1] 3897Branch determinisms for disjunction [2] 3898 Branch 1: det 3899 Branch 2: det 3900p / 1: 3901label(1): 3902 list_switch a(1) ref(5) ref(7) ref(fail) 3903 branch ref(fail) 3904label(3): 3905 in_get_nil a(1) 3906label(7): 3907 jmp p / 0 3908label(5): 3909 put_list a(2) 3910 write_atom a 3911 push_nil 3912 get_matched_value a(1) a(2) 3913 jmp q / 0 3914 3915------ Test idx(21) ------- 3916p(A) :- 3917 ( 3918 A == f(a), 3919 r 3920 ; 3921 A == "hello", 3922 s 3923 ). 3924 3925INDEXES for (semidet) disjunction [2] 39261. Quality 0.7 3927 [] - [] 3928 [structure] - [] 3929 [structure, f / 1] - [1] 3930 [string] - [2] 3931Branch determinisms for disjunction [2] 3932 Branch 1: det 3933 Branch 2: det 3934p / 1: 3935label(1): 3936 switch_on_type a(1) 3937 meta: ref(fail) 3938 []: ref(fail) 3939 atom: ref(fail) 3940 bignum: ref(fail) 3941 breal: ref(fail) 3942 double: ref(fail) 3943 goal: ref(fail) 3944 handle: ref(fail) 3945 integer: ref(fail) 3946 list: ref(fail) 3947 rational: ref(fail) 3948 string: ref(5) 3949 structure: ref(3) 3950 3951 branch ref(fail) 3952label(3): 3953 put_structure a(2) f / 1 3954 write_atom a 3955 get_matched_value a(1) a(2) 3956 jmp r / 0 3957label(5): 3958 in_get_string a(1) "hello" 3959 jmp s / 0 3960 3961------ Test idx(22) ------- 3962p(A) :- 3963 ( 3964 A == [], 3965 p 3966 ; 3967 ( 3968 A == [a], 3969 q 3970 ; 3971 A == f(a), 3972 r 3973 ) 3974 ). 3975 3976INDEXES for (semidet) disjunction [2] 39771. Quality 0.8 3978 [] - [] 3979 [list] - [2] 3980 [[]] - [1] 3981 [structure] - [] 3982 [structure, f / 1] - [3] 3983Branch determinisms for disjunction [2] 3984 Branch 1: det 3985 Branch 2: det 3986 Branch 3: det 3987p / 1: 3988label(1): 3989 switch_on_type a(1) 3990 meta: ref(fail) 3991 []: ref(9) 3992 atom: ref(fail) 3993 bignum: ref(fail) 3994 breal: ref(fail) 3995 double: ref(fail) 3996 goal: ref(fail) 3997 handle: ref(fail) 3998 integer: ref(fail) 3999 list: ref(5) 4000 rational: ref(fail) 4001 string: ref(fail) 4002 structure: ref(7) 4003 4004 branch ref(fail) 4005label(3): 4006 in_get_nil a(1) 4007label(9): 4008 jmp p / 0 4009label(5): 4010 put_list a(2) 4011 write_atom a 4012 push_nil 4013 get_matched_value a(1) a(2) 4014 jmp q / 0 4015label(7): 4016 put_structure a(2) f / 1 4017 write_atom a 4018 get_matched_value a(1) a(2) 4019 jmp r / 0 4020 4021------ Test idx(23) ------- 4022p :- 4023 ( 4024 A == [], 4025 p 4026 ; 4027 q 4028 ). 4029 4030p / 0: 4031label(1): 4032 try_me_else 0 0 ref(3) 4033label(2): 4034 put_variable a(1) 4035 in_get_nil a(1) 4036 jmp ref(1) 4037label(3): 4038 trust_me 0 4039label(4): 4040 jmp q / 0 4041 4042------ Test idx(24) ------- 4043p(A) :- 4044 ( 4045 A = f(B), 4046 !, 4047 p1 4048 ; 4049 ( 4050 A = [C|D], 4051 !, 4052 p2 4053 ; 4054 compound(A), 4055 p2 4056 ) 4057 ). 4058 4059INDEXES for (semidet) disjunction [2] 40601. Quality 1.0 4061 [] - [] 4062 [list] - [2] 4063 [structure] - [3] 4064 [structure, f / 1] - [1] 4065 [var] - [1] 4066Branch determinisms for disjunction [2] 4067 Branch 1: det 4068 Branch 2: det 4069 Branch 3: det 4070p / 1: 4071label(1): 4072 switch_on_type a(1) 4073 meta: ref(3) 4074 []: ref(fail) 4075 atom: ref(fail) 4076 bignum: ref(fail) 4077 breal: ref(fail) 4078 double: ref(fail) 4079 goal: ref(fail) 4080 handle: ref(fail) 4081 integer: ref(fail) 4082 list: ref(6) 4083 rational: ref(fail) 4084 string: ref(fail) 4085 structure: ref(11) 4086 4087label(3): 4088 get_structure a(1) f / 1 ref(4) 4089 write_void 4090label(4): 4091 jmp p1 / 0 4092label(6): 4093 get_list a(1) ref(7) 4094 write_void 2 4095label(7): 4096 jmp p2 / 0 4097label(9): 4098 bi_compound a(1) 4099 jmp p2 / 0 4100label(11): 4101 functor_switch a(1) 4102 f / 1: ref(4) 4103 default: ref(9) 4104 4105 4106------ Test idx(25) ------- 4107p(A) :- 4108 ( 4109 A = 1, 4110 p_integer 4111 ; 4112 ( 4113 A = 10000000000000000000, 4114 p_big 4115 ; 4116 ( 4117 A = 1.1, 4118 p_float 4119 ; 4120 ( 4121 A = 5_2, 4122 p_rational 4123 ; 4124 ( 4125 A = 0.9__1.1, 4126 p_breal 4127 ; 4128 ( 4129 A = "hello", 4130 p_string 4131 ; 4132 ( 4133 A = hello, 4134 p_atom 4135 ; 4136 ( 4137 A = [], 4138 p_nil 4139 ; 4140 ( 4141 A = [B|C], 4142 p_list 4143 ; 4144 A = foo(bar), 4145 p_struct 4146 ) 4147 ) 4148 ) 4149 ) 4150 ) 4151 ) 4152 ) 4153 ) 4154 ). 4155 4156INDEXES for (nondet) disjunction [2] 41571. Quality 1.8 4158 [] - [] 4159 [list] - [9] 4160 [[]] - [8] 4161 [structure] - [] 4162 [structure, foo / 1] - [10] 4163 [atom] - [] 4164 [atom, hello] - [7] 4165 [var] - [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 4166 [breal] - [5] 4167 [rational] - [4] 4168 [bignum] - [2] 4169 [integer] - [] 4170 [integer, 1] - [1] 4171 [string] - [6] 4172 [double] - [3] 4173Branch determinisms for disjunction [2] 4174 Branch 1: try 4175 Branch 2: retry 4176 Branch 3: retry 4177 Branch 4: retry 4178 Branch 5: retry 4179 Branch 6: retry 4180 Branch 7: retry 4181 Branch 8: retry 4182 Branch 9: retry 4183 Branch 10: trust 4184p / 1: 4185label(1): 4186 switch_on_type a(1) 4187 meta: ref(2) 4188 []: ref(26) 4189 atom: ref(15) 4190 bignum: ref(5) 4191 breal: ref(11) 4192 double: ref(7) 4193 goal: ref(fail) 4194 handle: ref(fail) 4195 integer: ref(3) 4196 list: ref(19) 4197 rational: ref(9) 4198 string: ref(13) 4199 structure: ref(22) 4200 4201label(2): 4202 try_me_else 0 1 ref(4) 4203label(3): 4204 get_integer a(1) 1 4205 jmp p_integer / 0 4206label(4): 4207 retry_me_else 0 ref(6) 4208label(5): 4209 get_constant a(1) 10000000000000000000 4210 jmp p_big / 0 4211label(6): 4212 retry_me_else 0 ref(8) 4213label(7): 4214 get_constant a(1) 1.1 4215 jmp p_float / 0 4216label(8): 4217 retry_me_else 0 ref(10) 4218label(9): 4219 get_constant a(1) 5_2 4220 jmp p_rational / 0 4221label(10): 4222 retry_me_else 0 ref(12) 4223label(11): 4224 get_constant a(1) 0.9__1.1 4225 jmp p_breal / 0 4226label(12): 4227 retry_me_else 0 ref(14) 4228label(13): 4229 get_string a(1) "hello" 4230 jmp p_string / 0 4231label(14): 4232 retry_me_else 0 ref(16) 4233label(15): 4234 get_atom a(1) hello 4235 jmp p_atom / 0 4236label(16): 4237 retry_me_else 0 ref(18) 4238label(17): 4239 get_nil a(1) 4240label(26): 4241 jmp p_nil / 0 4242label(18): 4243 retry_me_else 0 ref(21) 4244label(19): 4245 get_list a(1) ref(20) 4246 write_void 2 4247label(20): 4248 jmp p_list / 0 4249label(21): 4250 trust_me 0 4251label(22): 4252 get_structure a(1) foo / 1 ref(23) 4253 write_atom bar 4254 jmp p_struct / 0 4255label(23): 4256 read_atom bar 4257 jmp p_struct / 0 4258 4259------ Test idx(26) ------- 4260p(A) :- 4261 ( 4262 var(A), 4263 p_var 4264 ; 4265 ( 4266 integer(A), 4267 p_integer 4268 ; 4269 ( 4270 float(A), 4271 p_float 4272 ; 4273 ( 4274 rational(A), 4275 p_rational 4276 ; 4277 ( 4278 breal(A), 4279 p_breal 4280 ; 4281 ( 4282 string(A), 4283 p_string 4284 ; 4285 ( 4286 nonvar(A), 4287 A = [], 4288 !, 4289 p_nil 4290 ; 4291 ( 4292 atom(A), 4293 p_atom 4294 ; 4295 ( 4296 nonvar(A), 4297 A = [B|C], 4298 !, 4299 p_list 4300 ; 4301 ( 4302 compound(A), 4303 p_struct 4304 ; 4305 is_handle(A), 4306 p_handle 4307 ) 4308 ) 4309 ) 4310 ) 4311 ) 4312 ) 4313 ) 4314 ) 4315 ) 4316 ). 4317 4318INDEXES for (semidet) disjunction [2] 43191. Quality 1.0 4320 [] - [] 4321 [handle] - [11] 4322 [list] - [9] 4323 [[]] - [7] 4324 [structure] - [10] 4325 [atom] - [8] 4326 [var] - [1] 4327 [breal] - [5] 4328 [rational] - [4] 4329 [integer] - [2] 4330 [bignum] - [2] 4331 [string] - [6] 4332 [double] - [3] 4333Branch determinisms for disjunction [2] 4334 Branch 1: det 4335 Branch 2: det 4336 Branch 3: det 4337 Branch 4: det 4338 Branch 5: det 4339 Branch 6: det 4340 Branch 7: det 4341 Branch 8: det 4342 Branch 9: det 4343 Branch 10: det 4344 Branch 11: det 4345p / 1: 4346label(1): 4347 switch_on_type a(1) 4348 meta: ref(26) 4349 []: ref(27) 4350 atom: ref(28) 4351 bignum: ref(29) 4352 breal: ref(30) 4353 double: ref(31) 4354 goal: ref(fail) 4355 handle: ref(32) 4356 integer: ref(29) 4357 list: ref(33) 4358 rational: ref(34) 4359 string: ref(35) 4360 structure: ref(36) 4361 4362 branch ref(26) 4363label(3): 4364 bi_var a(1) 4365label(26): 4366 jmp p_var / 0 4367label(5): 4368 bi_integer a(1) 4369label(29): 4370 jmp p_integer / 0 4371label(7): 4372 bi_float a(1) 4373label(31): 4374 jmp p_float / 0 4375label(9): 4376 bi_rational a(1) 4377label(34): 4378 jmp p_rational / 0 4379label(11): 4380 bi_breal a(1) 4381label(30): 4382 jmp p_breal / 0 4383label(13): 4384 bi_string a(1) 4385label(35): 4386 jmp p_string / 0 4387label(15): 4388 bi_nonvar a(1) 4389label(27): 4390 get_nil a(1) 4391 jmp p_nil / 0 4392label(17): 4393 bi_atom a(1) 4394label(28): 4395 jmp p_atom / 0 4396label(19): 4397 bi_nonvar a(1) 4398label(33): 4399 get_list a(1) ref(20) 4400 write_void 2 4401label(20): 4402 jmp p_list / 0 4403label(22): 4404 bi_compound a(1) 4405label(36): 4406 jmp p_struct / 0 4407label(24): 4408 bi_is_handle a(1) 4409label(32): 4410 jmp p_handle / 0 4411 4412------ Test idx(27) ------- 4413p(A) :- 4414 ( 4415 atom(A), 4416 p_string 4417 ; 4418 A = hello, 4419 p_hello 4420 ). 4421 4422INDEXES for (nondet) disjunction [2] 44231. Quality 1.3 4424 [] - [] 4425 [[]] - [1] 4426 [var] - [2] 4427 [atom] - [1] 4428 [atom, hello] - [1, 2] 4429Branch determinisms for disjunction [2] 4430 Branch 1: try 4431 Branch 2: trust 4432p / 1: 4433label(1): 4434 switch_on_type a(1) 4435 meta: ref(5) 4436 []: ref(8) 4437 atom: ref(7) 4438 bignum: ref(fail) 4439 breal: ref(fail) 4440 double: ref(fail) 4441 goal: ref(fail) 4442 handle: ref(fail) 4443 integer: ref(fail) 4444 list: ref(fail) 4445 rational: ref(fail) 4446 string: ref(fail) 4447 structure: ref(fail) 4448 4449 branch ref(5) 4450label(2): 4451 try_me_else 0 1 ref(4) 4452label(3): 4453 bi_atom a(1) 4454label(8): 4455 jmp p_string / 0 4456label(4): 4457 trust_me 0 4458label(5): 4459 get_atom a(1) hello 4460 jmp p_hello / 0 4461label(7): 4462 atom_switch a(1) 4463 hello: ref(2) 4464 default: ref(3) 4465 4466 4467------ Test idx(28) ------- 4468p(A) :- 4469 ( 4470 A = "abc", 4471 p1 4472 ; 4473 ( 4474 A = "def", 4475 p2 4476 ; 4477 A = ghi, 4478 p3 4479 ) 4480 ). 4481 4482INDEXES for (nondet) disjunction [2] 44831. Quality 2.0 4484 [] - [] 4485 [atom] - [] 4486 [atom, ghi] - [3] 4487 [var] - [1, 2, 3] 4488 [string] - [1, 2] 4489Branch determinisms for disjunction [2] 4490 Branch 1: try 4491 Branch 2: retry 4492 Branch 3: trust 4493p / 1: 4494label(1): 4495 switch_on_type a(1) 4496 meta: ref(2) 4497 []: ref(fail) 4498 atom: ref(7) 4499 bignum: ref(fail) 4500 breal: ref(fail) 4501 double: ref(fail) 4502 goal: ref(fail) 4503 handle: ref(fail) 4504 integer: ref(fail) 4505 list: ref(fail) 4506 rational: ref(fail) 4507 string: ref(9) 4508 structure: ref(fail) 4509 4510label(2): 4511 try_me_else 0 1 ref(4) 4512label(3): 4513 get_string a(1) "abc" 4514 jmp p1 / 0 4515label(4): 4516 retry_me_else 0 ref(6) 4517label(5): 4518 get_string a(1) "def" 4519 jmp p2 / 0 4520label(6): 4521 trust_me 0 4522label(7): 4523 get_atom a(1) ghi 4524 jmp p3 / 0 4525label(9): 4526 try 0 1 ref(3) 4527 trust 0 ref(5) 4528 4529------ Test idx(29) ------- 4530p(A) :- 4531 A = 1, 4532 p, 4533 q(A). 4534p(A) :- 4535 A = 2, 4536 q, 4537 r(A). 4538 4539INDEXES for (nondet) disjunction [2] 45401. Quality 1.3 4541 [] - [] 4542 [var] - [1, 2] 4543 [integer] - [] 4544 [integer, 1] - [1] 4545 [integer, 2] - [2] 4546Branch determinisms for disjunction [2] 4547 Branch 1: try 4548 Branch 2: trust 4549p / 1: 4550label(1): 4551 integer_switch a(1) 4552 1: ref(7) 4553 2: ref(8) 4554 default: ref(fail) 4555 4556label(2): 4557 try_me_else 0 1 ref(4) 4558label(3): 4559 get_integer a(1) 1 4560label(7): 4561 get_variable 1 a(1) y(1) 4562 callf p / 0 Y[1] 4563 move_chain y(1) a(1) q / 1 4564label(4): 4565 trust_me 0 4566label(5): 4567 get_integer a(1) 2 4568label(8): 4569 get_variable 1 a(1) y(1) 4570 callf q / 0 Y[1] 4571 move_chain y(1) a(1) r / 1 4572 4573------ Test idx(30) ------- 4574p(A) :- 4575 ( 4576 A = 1, 4577 !, 4578 p1 4579 ; 4580 ( 4581 A = 2, 4582 !, 4583 p2 4584 ; 4585 p4 4586 ) 4587 ). 4588 4589INDEXES for (semidet) disjunction [2] 45901. Quality 1.0 4591 [] - [3] 4592 [var] - [1] 4593 [integer] - [3] 4594 [integer, 1] - [1] 4595 [integer, 2] - [2] 4596Branch determinisms for disjunction [2] 4597 Branch 1: det 4598 Branch 2: det 4599 Branch 3: det 4600p / 1: 4601label(1): 4602 integer_switch a(1) 4603 1: ref(9) 4604 2: ref(10) 4605 default: ref(7) 4606 4607label(3): 4608 get_integer a(1) 1 4609label(9): 4610 jmp p1 / 0 4611label(5): 4612 get_integer a(1) 2 4613label(10): 4614 jmp p2 / 0 4615label(7): 4616 jmp p4 / 0 4617 4618------ Test idx(31) ------- 4619p(A) :- 4620 ( 4621 A = 1, 4622 !, 4623 p1 4624 ; 4625 ( 4626 A = 2, 4627 !, 4628 p2 4629 ; 4630 integer(A), 4631 p4 4632 ) 4633 ). 4634 4635INDEXES for (semidet) disjunction [2] 46361. Quality 1.0 4637 [] - [] 4638 [var] - [1] 4639 [bignum] - [3] 4640 [integer] - [3] 4641 [integer, 1] - [1] 4642 [integer, 2] - [2] 4643Branch determinisms for disjunction [2] 4644 Branch 1: det 4645 Branch 2: det 4646 Branch 3: det 4647p / 1: 4648label(1): 4649 switch_on_type a(1) 4650 meta: ref(3) 4651 []: ref(fail) 4652 atom: ref(fail) 4653 bignum: ref(10) 4654 breal: ref(fail) 4655 double: ref(fail) 4656 goal: ref(fail) 4657 handle: ref(fail) 4658 integer: ref(9) 4659 list: ref(fail) 4660 rational: ref(fail) 4661 string: ref(fail) 4662 structure: ref(fail) 4663 4664label(3): 4665 get_integer a(1) 1 4666label(11): 4667 jmp p1 / 0 4668label(5): 4669 get_integer a(1) 2 4670label(12): 4671 jmp p2 / 0 4672label(7): 4673 bi_integer a(1) 4674label(10): 4675 jmp p4 / 0 4676label(9): 4677 integer_switch a(1) 4678 1: ref(11) 4679 2: ref(12) 4680 default: ref(7) 4681 4682 4683------ Test idx(32) ------- 4684p(A) :- 4685 ( 4686 A = f(B), 4687 !, 4688 p1 4689 ; 4690 ( 4691 A = g(C), 4692 !, 4693 p2 4694 ; 4695 ( 4696 A = [D|E], 4697 !, 4698 p3 4699 ; 4700 compound(A), 4701 p4 4702 ) 4703 ) 4704 ). 4705 4706INDEXES for (semidet) disjunction [2] 47071. Quality 1.0 4708 [] - [] 4709 [list] - [3] 4710 [structure] - [4] 4711 [structure, f / 1] - [1] 4712 [structure, g / 1] - [2] 4713 [var] - [1] 4714Branch determinisms for disjunction [2] 4715 Branch 1: det 4716 Branch 2: det 4717 Branch 3: det 4718 Branch 4: det 4719p / 1: 4720label(1): 4721 switch_on_type a(1) 4722 meta: ref(3) 4723 []: ref(fail) 4724 atom: ref(fail) 4725 bignum: ref(fail) 4726 breal: ref(fail) 4727 double: ref(fail) 4728 goal: ref(fail) 4729 handle: ref(fail) 4730 integer: ref(fail) 4731 list: ref(9) 4732 rational: ref(fail) 4733 string: ref(fail) 4734 structure: ref(14) 4735 4736label(3): 4737 get_structure a(1) f / 1 ref(4) 4738 write_void 4739label(4): 4740 jmp p1 / 0 4741label(7): 4742 jmp p2 / 0 4743label(9): 4744 get_list a(1) ref(10) 4745 write_void 2 4746label(10): 4747 jmp p3 / 0 4748label(12): 4749 bi_compound a(1) 4750 jmp p4 / 0 4751label(14): 4752 functor_switch a(1) 4753 f / 1: ref(4) 4754 g / 1: ref(7) 4755 default: ref(12) 4756 4757 4758------ Test idx(33) ------- 4759p(f(A, B, C)) :- 4760 !, 4761 p1(A, B, C). 4762p([A|B]) :- 4763 !, 4764 p2(A, B). 4765p(A) :- 4766 compound(A), 4767 p3. 4768 4769INDEXES for (semidet) disjunction [2] 47701. Quality 1.0 4771 [] - [] 4772 [list] - [2] 4773 [structure] - [3] 4774 [structure, f / 3] - [1] 4775 [var] - [1] 4776Branch determinisms for disjunction [2] 4777 Branch 1: det 4778 Branch 2: det 4779 Branch 3: det 4780p / 1: 4781label(1): 4782 switch_on_type a(1) 4783 meta: ref(3) 4784 []: ref(fail) 4785 atom: ref(fail) 4786 bignum: ref(fail) 4787 breal: ref(fail) 4788 double: ref(fail) 4789 goal: ref(fail) 4790 handle: ref(fail) 4791 integer: ref(fail) 4792 list: ref(7) 4793 rational: ref(fail) 4794 string: ref(fail) 4795 structure: ref(13) 4796 4797label(3): 4798 get_structure a(1) f / 3 ref(4) 4799 write_variable2 a(1) a(2) 4800 write_variable a(3) 4801 jmp p1 / 3 4802label(4): 4803 read_variable2 a(1) a(2) 4804 read_variable a(3) 4805 jmp p1 / 3 4806label(7): 4807 get_list a(1) ref(8) 4808 write_variable2 a(1) a(2) 4809 jmp p2 / 2 4810label(8): 4811 read_variable2 a(1) a(2) 4812 jmp p2 / 2 4813label(11): 4814 bi_compound a(1) 4815 jmp p3 / 0 4816label(13): 4817 functor_switch a(1) 4818 f / 3: ref(4) 4819 default: ref(11) 4820 4821 4822------ Test idx(34) ------- 4823p(f(A, B, A), C) :- 4824 !, 4825 p1(A, B, C). 4826p([A|B], B) :- 4827 !, 4828 p2(A, B). 4829p(A, B) :- 4830 compound(A), 4831 p3. 4832 4833INDEXES for (nondet) disjunction [2] 48341. Quality 1.5 4835 [] - [] 4836 [list] - [2, 3] 4837 [structure] - [3] 4838 [structure, f / 3] - [1, 3] 4839 [var] - [1] 4840Branch determinisms for disjunction [2] 4841 Branch 1: try 4842 Branch 2: try 4843 Branch 3: trust 4844p / 2: 4845label(1): 4846 savecut a(3) 4847 switch_on_type a(1) 4848 meta: ref(3) 4849 []: ref(fail) 4850 atom: ref(fail) 4851 bignum: ref(fail) 4852 breal: ref(fail) 4853 double: ref(fail) 4854 goal: ref(fail) 4855 handle: ref(fail) 4856 integer: ref(fail) 4857 list: ref(13) 4858 rational: ref(fail) 4859 string: ref(fail) 4860 structure: ref(15) 4861 4862label(3): 4863 get_structure a(1) f / 3 ref(4) 4864 write_variable a(1) 4865 shift a(4) a(3) a(2) 4866 write_variable a(2) 4867 write_value a(1) 4868 cut a(4) 4869 jmp p1 / 3 4870label(4): 4871 read_variable a(1) 4872 shift a(4) a(3) a(2) 4873 read_variable a(2) 4874 read_value a(1) 4875 cut a(4) 4876 jmp p1 / 3 4877label(7): 4878 get_list a(1) ref(8) 4879 write_variable a(1) 4880 write_value a(2) 4881 cut a(3) 4882 jmp p2 / 2 4883label(8): 4884 read_variable a(1) 4885 read_value a(2) 4886 cut a(3) 4887 jmp p2 / 2 4888label(11): 4889 bi_compound a(1) 4890 jmp p3 / 0 4891label(13): 4892 try 0 3 ref(7) 4893 trust 0 ref(11) 4894label(14): 4895 try 0 3 ref(3) 4896 trust 0 ref(11) 4897label(15): 4898 functor_switch a(1) 4899 f / 3: ref(14) 4900 default: ref(11) 4901 4902 4903------ Test idx(35) ------- 4904p(f(A, B, C)) :- 4905 -?-> 4906 !, 4907 p1(A, B, C). 4908p([A|B]) :- 4909 -?-> 4910 !, 4911 p2(A, B). 4912p(A) :- 4913 compound(A), 4914 p3. 4915 4916INDEXES for (semidet) disjunction [2] 49171. Quality 0.8 4918 [] - [] 4919 [list] - [2] 4920 [structure] - [3] 4921 [structure, f / 3] - [1] 4922Branch determinisms for disjunction [2] 4923 Branch 1: det 4924 Branch 2: det 4925 Branch 3: det 4926p / 1: 4927label(1): 4928 switch_on_type a(1) 4929 meta: ref(fail) 4930 []: ref(fail) 4931 atom: ref(fail) 4932 bignum: ref(fail) 4933 breal: ref(fail) 4934 double: ref(fail) 4935 goal: ref(fail) 4936 handle: ref(fail) 4937 integer: ref(fail) 4938 list: ref(6) 4939 rational: ref(fail) 4940 string: ref(fail) 4941 structure: ref(11) 4942 4943 branch ref(fail) 4944label(4): 4945 read_variable2 a(1) a(2) 4946 read_variable a(3) 4947 jmp p1 / 3 4948label(6): 4949 in_get_list a(1) ref(7) 4950label(7): 4951 read_variable2 a(1) a(2) 4952 jmp p2 / 2 4953label(9): 4954 bi_compound a(1) 4955 jmp p3 / 0 4956label(11): 4957 functor_switch a(1) 4958 f / 3: ref(4) 4959 default: ref(9) 4960 4961 4962------ Test idx(36) ------- 4963p(f(A, B, C), C) :- 4964 -?-> 4965 !, 4966 p1(A, B, C). 4967p([A|B], B) :- 4968 -?-> 4969 !, 4970 p2(A, B). 4971p(A, B) :- 4972 compound(A), 4973 p3. 4974 4975INDEXES for (nondet) disjunction [2] 49761. Quality 1.2 4977 [] - [] 4978 [list] - [2, 3] 4979 [structure] - [3] 4980 [structure, f / 3] - [1, 3] 4981Branch determinisms for disjunction [2] 4982 Branch 1: try 4983 Branch 2: try 4984 Branch 3: trust 4985p / 2: 4986label(1): 4987 savecut a(3) 4988 switch_on_type a(1) 4989 meta: ref(fail) 4990 []: ref(fail) 4991 atom: ref(fail) 4992 bignum: ref(fail) 4993 breal: ref(fail) 4994 double: ref(fail) 4995 goal: ref(fail) 4996 handle: ref(fail) 4997 integer: ref(fail) 4998 list: ref(11) 4999 rational: ref(fail) 5000 string: ref(fail) 5001 structure: ref(13) 5002 5003 branch ref(fail) 5004label(3): 5005 in_get_structure a(1) f / 3 ref(4) 5006label(4): 5007 read_variable a(1) 5008 shift a(4) a(3) a(2) 5009 read_variable a(2) 5010 read_matched_value a(3) 5011 cut a(4) 5012 jmp p1 / 3 5013label(6): 5014 in_get_list a(1) ref(7) 5015label(7): 5016 read_variable a(1) 5017 read_matched_value a(2) 5018 cut a(3) 5019 jmp p2 / 2 5020label(9): 5021 bi_compound a(1) 5022 jmp p3 / 0 5023label(11): 5024 try 0 3 ref(6) 5025 trust 0 ref(9) 5026label(12): 5027 try 0 3 ref(3) 5028 trust 0 ref(9) 5029label(13): 5030 functor_switch a(1) 5031 f / 3: ref(12) 5032 default: ref(9) 5033 5034 5035------ Test idx(40) ------- 5036p(A) :- 5037 ( 5038 free(A), 5039 p1 5040 ; 5041 ( 5042 meta(A), 5043 p2 5044 ; 5045 p3 5046 ) 5047 ). 5048 5049INDEXES for (nondet) disjunction [2] 50501. Quality 1.7 5051 [] - [3] 5052 [var] - [3] 5053 [var, free] - [1, 3] 5054 [var, meta] - [2, 3] 5055Branch determinisms for disjunction [2] 5056 Branch 1: try 5057 Branch 2: try 5058 Branch 3: trust 5059p / 1: 5060label(1): 5061 switch_on_type a(1) 5062 meta: ref(10) 5063 []: ref(7) 5064 atom: ref(7) 5065 bignum: ref(7) 5066 breal: ref(7) 5067 double: ref(7) 5068 goal: ref(7) 5069 handle: ref(7) 5070 integer: ref(7) 5071 list: ref(7) 5072 rational: ref(7) 5073 string: ref(7) 5074 structure: ref(7) 5075 5076label(9): 5077 try 0 1 ref(3) 5078 trust 0 ref(7) 5079label(3): 5080 bi_free a(1) 5081 jmp p1 / 0 5082label(5): 5083 bi_meta a(1) 5084 jmp p2 / 0 5085label(7): 5086 jmp p3 / 0 5087label(10): 5088 try 0 1 ref(5) 5089 trust 0 ref(7) 5090 5091------ Test idx(41) ------- 5092p(A) :- 5093 ( 5094 free(A), 5095 !, 5096 p1 5097 ; 5098 ( 5099 meta(A), 5100 !, 5101 p2 5102 ; 5103 p3 5104 ) 5105 ). 5106 5107INDEXES for (semidet) disjunction [2] 51081. Quality 1.0 5109 [] - [3] 5110 [var] - [3] 5111 [var, free] - [1] 5112 [var, meta] - [2] 5113Branch determinisms for disjunction [2] 5114 Branch 1: det 5115 Branch 2: det 5116 Branch 3: det 5117p / 1: 5118label(1): 5119 switch_on_type a(1) 5120 meta: ref(10) 5121 []: ref(7) 5122 atom: ref(7) 5123 bignum: ref(7) 5124 breal: ref(7) 5125 double: ref(7) 5126 goal: ref(7) 5127 handle: ref(7) 5128 integer: ref(7) 5129 list: ref(7) 5130 rational: ref(7) 5131 string: ref(7) 5132 structure: ref(7) 5133 5134 branch ref(9) 5135label(3): 5136 bi_free a(1) 5137label(9): 5138 jmp p1 / 0 5139label(5): 5140 bi_meta a(1) 5141label(10): 5142 jmp p2 / 0 5143label(7): 5144 jmp p3 / 0 5145 5146------ Test idx(42) ------- 5147p(A) :- 5148 ( 5149 free(A), 5150 p1 5151 ; 5152 ( 5153 meta(A), 5154 p2 5155 ; 5156 atom(A), 5157 p3 5158 ) 5159 ). 5160 5161INDEXES for (semidet) disjunction [2] 51621. Quality 1.0 5163 [] - [] 5164 [[]] - [3] 5165 [atom] - [3] 5166 [var] - [] 5167 [var, free] - [1] 5168 [var, meta] - [2] 5169Branch determinisms for disjunction [2] 5170 Branch 1: det 5171 Branch 2: det 5172 Branch 3: det 5173p / 1: 5174label(1): 5175 switch_on_type a(1) 5176 meta: ref(10) 5177 []: ref(11) 5178 atom: ref(11) 5179 bignum: ref(fail) 5180 breal: ref(fail) 5181 double: ref(fail) 5182 goal: ref(fail) 5183 handle: ref(fail) 5184 integer: ref(fail) 5185 list: ref(fail) 5186 rational: ref(fail) 5187 string: ref(fail) 5188 structure: ref(fail) 5189 5190 branch ref(9) 5191label(3): 5192 bi_free a(1) 5193label(9): 5194 jmp p1 / 0 5195label(5): 5196 bi_meta a(1) 5197label(10): 5198 jmp p2 / 0 5199label(7): 5200 bi_atom a(1) 5201label(11): 5202 jmp p3 / 0 5203 5204------ Test idx(43) ------- 5205p(A) :- 5206 ( 5207 free(A), 5208 p1 5209 ; 5210 p2 5211 ). 5212 5213INDEXES for (nondet) disjunction [2] 52141. Quality 1.5 5215 [] - [2] 5216 [var] - [2] 5217 [var, free] - [1, 2] 5218Branch determinisms for disjunction [2] 5219 Branch 1: try 5220 Branch 2: trust 5221p / 1: 5222label(1): 5223 switch_on_type a(1) 5224 meta: ref(5) 5225 []: ref(5) 5226 atom: ref(5) 5227 bignum: ref(5) 5228 breal: ref(5) 5229 double: ref(5) 5230 goal: ref(5) 5231 handle: ref(5) 5232 integer: ref(5) 5233 list: ref(5) 5234 rational: ref(5) 5235 string: ref(5) 5236 structure: ref(5) 5237 5238label(2): 5239 try_me_else 0 1 ref(4) 5240label(3): 5241 bi_free a(1) 5242 jmp p1 / 0 5243label(4): 5244 trust_me 0 5245label(5): 5246 jmp p2 / 0 5247 5248------ Test idx(44) ------- 5249p(A) :- 5250 ( 5251 free(A), 5252 !, 5253 p1 5254 ; 5255 p2 5256 ). 5257 5258INDEXES for (semidet) disjunction [2] 52591. Quality 1.0 5260 [] - [2] 5261 [var] - [2] 5262 [var, free] - [1] 5263Branch determinisms for disjunction [2] 5264 Branch 1: det 5265 Branch 2: det 5266p / 1: 5267label(1): 5268 switch_on_type a(1) 5269 meta: ref(5) 5270 []: ref(5) 5271 atom: ref(5) 5272 bignum: ref(5) 5273 breal: ref(5) 5274 double: ref(5) 5275 goal: ref(5) 5276 handle: ref(5) 5277 integer: ref(5) 5278 list: ref(5) 5279 rational: ref(5) 5280 string: ref(5) 5281 structure: ref(5) 5282 5283 branch ref(7) 5284label(3): 5285 bi_free a(1) 5286label(7): 5287 jmp p1 / 0 5288label(5): 5289 jmp p2 / 0 5290 5291------ Test idx(45) ------- 5292p(A) :- 5293 ( 5294 free(A), 5295 p1 5296 ; 5297 p2 5298 ). 5299 5300INDEXES for (nondet) disjunction [2] 53011. Quality 1.5 5302 [] - [2] 5303 [var] - [2] 5304 [var, free] - [1, 2] 5305Branch determinisms for disjunction [2] 5306 Branch 1: try 5307 Branch 2: trust 5308p / 1: 5309label(1): 5310 switch_on_type a(1) 5311 meta: ref(5) 5312 []: ref(5) 5313 atom: ref(5) 5314 bignum: ref(5) 5315 breal: ref(5) 5316 double: ref(5) 5317 goal: ref(5) 5318 handle: ref(5) 5319 integer: ref(5) 5320 list: ref(5) 5321 rational: ref(5) 5322 string: ref(5) 5323 structure: ref(5) 5324 5325label(2): 5326 try_me_else 0 1 ref(4) 5327label(3): 5328 bi_free a(1) 5329 jmp p1 / 0 5330label(4): 5331 trust_me 0 5332label(5): 5333 jmp p2 / 0 5334 5335------ Test idx(46) ------- 5336p(A) :- 5337 ( 5338 meta(A), 5339 p1 5340 ; 5341 p2 5342 ). 5343 5344INDEXES for (nondet) disjunction [2] 53451. Quality 1.5 5346 [] - [2] 5347 [var] - [2] 5348 [var, meta] - [1, 2] 5349Branch determinisms for disjunction [2] 5350 Branch 1: try 5351 Branch 2: trust 5352p / 1: 5353label(1): 5354 switch_on_type a(1) 5355 meta: ref(2) 5356 []: ref(5) 5357 atom: ref(5) 5358 bignum: ref(5) 5359 breal: ref(5) 5360 double: ref(5) 5361 goal: ref(5) 5362 handle: ref(5) 5363 integer: ref(5) 5364 list: ref(5) 5365 rational: ref(5) 5366 string: ref(5) 5367 structure: ref(5) 5368 5369 branch ref(5) 5370label(2): 5371 try_me_else 0 1 ref(4) 5372label(3): 5373 bi_meta a(1) 5374 jmp p1 / 0 5375label(4): 5376 trust_me 0 5377label(5): 5378 jmp p2 / 0 5379 5380------ Test idx(47) ------- 5381p(A) :- 5382 ( 5383 meta(A), 5384 !, 5385 p1 5386 ; 5387 p2 5388 ). 5389 5390INDEXES for (semidet) disjunction [2] 53911. Quality 1.0 5392 [] - [2] 5393 [var] - [2] 5394 [var, meta] - [1] 5395Branch determinisms for disjunction [2] 5396 Branch 1: det 5397 Branch 2: det 5398p / 1: 5399label(1): 5400 switch_on_type a(1) 5401 meta: ref(7) 5402 []: ref(5) 5403 atom: ref(5) 5404 bignum: ref(5) 5405 breal: ref(5) 5406 double: ref(5) 5407 goal: ref(5) 5408 handle: ref(5) 5409 integer: ref(5) 5410 list: ref(5) 5411 rational: ref(5) 5412 string: ref(5) 5413 structure: ref(5) 5414 5415label(5): 5416 jmp p2 / 0 5417label(3): 5418 bi_meta a(1) 5419label(7): 5420 jmp p1 / 0 5421 5422------ Test idx(48) ------- 5423p(A) :- 5424 ( 5425 meta(A), 5426 p1 5427 ; 5428 p2 5429 ). 5430 5431INDEXES for (nondet) disjunction [2] 54321. Quality 1.5 5433 [] - [2] 5434 [var] - [2] 5435 [var, meta] - [1, 2] 5436Branch determinisms for disjunction [2] 5437 Branch 1: try 5438 Branch 2: trust 5439p / 1: 5440label(1): 5441 switch_on_type a(1) 5442 meta: ref(2) 5443 []: ref(5) 5444 atom: ref(5) 5445 bignum: ref(5) 5446 breal: ref(5) 5447 double: ref(5) 5448 goal: ref(5) 5449 handle: ref(5) 5450 integer: ref(5) 5451 list: ref(5) 5452 rational: ref(5) 5453 string: ref(5) 5454 structure: ref(5) 5455 5456 branch ref(5) 5457label(2): 5458 try_me_else 0 1 ref(4) 5459label(3): 5460 bi_meta a(1) 5461 jmp p1 / 0 5462label(4): 5463 trust_me 0 5464label(5): 5465 jmp p2 / 0 5466 5467------ Test idx(49) ------- 5468p(A) :- 5469 ( 5470 free(A), 5471 p1 5472 ; 5473 ( 5474 var(A), 5475 p2 5476 ; 5477 p3 5478 ) 5479 ). 5480 5481INDEXES for (nondet) disjunction [2] 54821. Quality 2.0 5483 [] - [3] 5484 [var] - [2, 3] 5485 [var, free] - [1, 2, 3] 5486Branch determinisms for disjunction [2] 5487 Branch 1: try 5488 Branch 2: retry 5489 Branch 3: trust 5490p / 1: 5491label(1): 5492 switch_on_type a(1) 5493 meta: ref(9) 5494 []: ref(7) 5495 atom: ref(7) 5496 bignum: ref(7) 5497 breal: ref(7) 5498 double: ref(7) 5499 goal: ref(7) 5500 handle: ref(7) 5501 integer: ref(7) 5502 list: ref(7) 5503 rational: ref(7) 5504 string: ref(7) 5505 structure: ref(7) 5506 5507label(2): 5508 try_me_else 0 1 ref(4) 5509label(3): 5510 bi_free a(1) 5511 jmp p1 / 0 5512label(4): 5513 retry_me_else 0 ref(6) 5514label(5): 5515 bi_var a(1) 5516 jmp p2 / 0 5517label(6): 5518 trust_me 0 5519label(7): 5520 jmp p3 / 0 5521label(9): 5522 try 0 1 ref(5) 5523 trust 0 ref(7) 5524 5525------ Test idx(50) ------- 5526p(A) :- 5527 ( 5528 free(A), 5529 !, 5530 p1 5531 ; 5532 ( 5533 var(A), 5534 !, 5535 p2 5536 ; 5537 p3 5538 ) 5539 ). 5540 5541INDEXES for (semidet) disjunction [2] 55421. Quality 1.0 5543 [] - [3] 5544 [var] - [2] 5545 [var, free] - [1] 5546Branch determinisms for disjunction [2] 5547 Branch 1: det 5548 Branch 2: det 5549 Branch 3: det 5550p / 1: 5551label(1): 5552 switch_on_type a(1) 5553 meta: ref(10) 5554 []: ref(7) 5555 atom: ref(7) 5556 bignum: ref(7) 5557 breal: ref(7) 5558 double: ref(7) 5559 goal: ref(7) 5560 handle: ref(7) 5561 integer: ref(7) 5562 list: ref(7) 5563 rational: ref(7) 5564 string: ref(7) 5565 structure: ref(7) 5566 5567 branch ref(9) 5568label(3): 5569 bi_free a(1) 5570label(9): 5571 jmp p1 / 0 5572label(5): 5573 bi_var a(1) 5574label(10): 5575 jmp p2 / 0 5576label(7): 5577 jmp p3 / 0 5578 5579------ Test idx(51) ------- 5580p(A) :- 5581 ( 5582 free(A), 5583 p1 5584 ; 5585 ( 5586 var(A), 5587 p2 5588 ; 5589 atom(A), 5590 p3 5591 ) 5592 ). 5593 5594INDEXES for (nondet) disjunction [2] 55951. Quality 1.3 5596 [] - [] 5597 [[]] - [3] 5598 [atom] - [3] 5599 [var] - [2] 5600 [var, free] - [1, 2] 5601Branch determinisms for disjunction [2] 5602 Branch 1: try 5603 Branch 2: trust 5604 Branch 3: det 5605p / 1: 5606label(1): 5607 switch_on_type a(1) 5608 meta: ref(10) 5609 []: ref(11) 5610 atom: ref(11) 5611 bignum: ref(fail) 5612 breal: ref(fail) 5613 double: ref(fail) 5614 goal: ref(fail) 5615 handle: ref(fail) 5616 integer: ref(fail) 5617 list: ref(fail) 5618 rational: ref(fail) 5619 string: ref(fail) 5620 structure: ref(fail) 5621 5622label(9): 5623 try 0 1 ref(3) 5624 trust 0 ref(5) 5625label(3): 5626 bi_free a(1) 5627 jmp p1 / 0 5628label(5): 5629 bi_var a(1) 5630label(10): 5631 jmp p2 / 0 5632label(7): 5633 bi_atom a(1) 5634label(11): 5635 jmp p3 / 0 5636 5637------ Test idx(52) ------- 5638p(A) :- 5639 ( 5640 var(A), 5641 !, 5642 p1 5643 ; 5644 p2 5645 ). 5646 5647INDEXES for (semidet) disjunction [2] 56481. Quality 1.0 5649 [] - [2] 5650 [var] - [1] 5651Branch determinisms for disjunction [2] 5652 Branch 1: det 5653 Branch 2: det 5654p / 1: 5655label(1): 5656 switch_on_type a(1) 5657 meta: ref(7) 5658 []: ref(5) 5659 atom: ref(5) 5660 bignum: ref(5) 5661 breal: ref(5) 5662 double: ref(5) 5663 goal: ref(5) 5664 handle: ref(5) 5665 integer: ref(5) 5666 list: ref(5) 5667 rational: ref(5) 5668 string: ref(5) 5669 structure: ref(5) 5670 5671 branch ref(7) 5672label(3): 5673 bi_var a(1) 5674label(7): 5675 jmp p1 / 0 5676label(5): 5677 jmp p2 / 0 5678 5679------ Test idx(53) ------- 5680p(A) :- 5681 ( 5682 var(A), 5683 !, 5684 p1 5685 ; 5686 ( 5687 A = 1, 5688 p2 5689 ; 5690 A = 2, 5691 p3 5692 ) 5693 ). 5694 5695INDEXES for (semidet) disjunction [2] 56961. Quality 1.0 5697 [] - [] 5698 [var] - [1] 5699 [integer] - [] 5700 [integer, 1] - [2] 5701 [integer, 2] - [3] 5702Branch determinisms for disjunction [2] 5703 Branch 1: det 5704 Branch 2: det 5705 Branch 3: det 5706p / 1: 5707label(1): 5708 integer_switch a(1) 5709 1: ref(9) 5710 2: ref(10) 5711 default: ref(fail) 5712 5713label(3): 5714 bi_var a(1) 5715 jmp p1 / 0 5716label(5): 5717 get_integer a(1) 1 5718label(9): 5719 jmp p2 / 0 5720label(7): 5721 get_integer a(1) 2 5722label(10): 5723 jmp p3 / 0 5724 5725------ Test idx(54) ------- 5726p(A) :- 5727 ( 5728 var(A), 5729 !, 5730 p1 5731 ; 5732 ( 5733 integer(A), 5734 A = 1, 5735 p2 5736 ; 5737 integer(A), 5738 A = 2, 5739 p3 5740 ) 5741 ). 5742 5743INDEXES for (semidet) disjunction [2] 57441. Quality 1.0 5745 [] - [] 5746 [var] - [1] 5747 [integer] - [] 5748 [integer, 1] - [2] 5749 [integer, 2] - [3] 5750Branch determinisms for disjunction [2] 5751 Branch 1: det 5752 Branch 2: det 5753 Branch 3: det 5754p / 1: 5755label(1): 5756 integer_switch a(1) 5757 1: ref(5) 5758 2: ref(7) 5759 default: ref(fail) 5760 5761label(3): 5762 bi_var a(1) 5763 jmp p1 / 0 5764label(5): 5765 bi_integer a(1) 5766 get_integer a(1) 1 5767 jmp p2 / 0 5768label(7): 5769 bi_integer a(1) 5770 get_integer a(1) 2 5771 jmp p3 / 0 5772 5773------ Test idx(55) ------- 5774p(A) :- 5775 ( 5776 var(A), 5777 !, 5778 p1 5779 ; 5780 ( 5781 A = 1, 5782 !, 5783 p2 5784 ; 5785 integer(A), 5786 p3 5787 ) 5788 ). 5789 5790INDEXES for (semidet) disjunction [2] 57911. Quality 1.0 5792 [] - [] 5793 [var] - [1] 5794 [bignum] - [3] 5795 [integer] - [3] 5796 [integer, 1] - [2] 5797Branch determinisms for disjunction [2] 5798 Branch 1: det 5799 Branch 2: det 5800 Branch 3: det 5801p / 1: 5802label(1): 5803 switch_on_type a(1) 5804 meta: ref(10) 5805 []: ref(fail) 5806 atom: ref(fail) 5807 bignum: ref(11) 5808 breal: ref(fail) 5809 double: ref(fail) 5810 goal: ref(fail) 5811 handle: ref(fail) 5812 integer: ref(9) 5813 list: ref(fail) 5814 rational: ref(fail) 5815 string: ref(fail) 5816 structure: ref(fail) 5817 5818 branch ref(10) 5819label(3): 5820 bi_var a(1) 5821label(10): 5822 jmp p1 / 0 5823label(5): 5824 get_integer a(1) 1 5825label(12): 5826 jmp p2 / 0 5827label(7): 5828 bi_integer a(1) 5829label(11): 5830 jmp p3 / 0 5831label(9): 5832 integer_switch a(1) 5833 1: ref(12) 5834 default: ref(7) 5835 5836 5837------ Test idx(56) ------- 5838p(A, B) :- 5839 ( 5840 integer(A), 5841 B = a, 5842 p1 5843 ; 5844 ( 5845 integer(A), 5846 B = b, 5847 p2 5848 ; 5849 ( 5850 integer(A), 5851 B = c, 5852 p3 5853 ; 5854 atom(A), 5855 p4 5856 ) 5857 ) 5858 ). 5859 5860INDEXES for (nondet) disjunction [2] 58611. Quality 1.3 5862 [] - [] 5863 [[]] - [4] 5864 [atom] - [4] 5865 [integer] - [1, 2, 3] 5866 [bignum] - [1, 2, 3] 58672. Quality 2.2 5868 [] - [4] 5869 [atom] - [4] 5870 [atom, a] - [1, 4] 5871 [atom, b] - [2, 4] 5872 [atom, c] - [3, 4] 5873 [var] - [1, 2, 3, 4] 5874Branch determinisms for disjunction [2] 5875 Branch 1: try 5876 Branch 2: retry 5877 Branch 3: trust 5878 Branch 4: det 5879p / 2: 5880label(1): 5881 switch_on_type a(1) 5882 meta: ref(fail) 5883 []: ref(16) 5884 atom: ref(16) 5885 bignum: ref(12) 5886 breal: ref(fail) 5887 double: ref(fail) 5888 goal: ref(fail) 5889 handle: ref(fail) 5890 integer: ref(12) 5891 list: ref(fail) 5892 rational: ref(fail) 5893 string: ref(fail) 5894 structure: ref(fail) 5895 5896 branch ref(fail) 5897label(4): 5898 bi_integer a(1) 5899 get_atom a(2) a 5900 jmp p1 / 0 5901label(6): 5902 bi_integer a(1) 5903 get_atom a(2) b 5904 jmp p2 / 0 5905label(8): 5906 bi_integer a(1) 5907 get_atom a(2) c 5908 jmp p3 / 0 5909label(10): 5910 bi_atom a(1) 5911label(16): 5912 jmp p4 / 0 5913label(12): 5914 try 0 2 ref(4) 5915 retry 0 ref(6) 5916 trust 0 ref(8) 5917 5918------ Test idx(60) ------- 5919p(A) :- 5920 ( 5921 var(A), 5922 p_var 5923 ; 5924 ( 5925 ( 5926 integer(A) 5927 ; 5928 ( 5929 float(A) 5930 ; 5931 rational(A) 5932 ) 5933 ), 5934 p_intfloatrat 5935 ; 5936 ( 5937 breal(A), 5938 p_breal 5939 ; 5940 ( 5941 nonvar(A), 5942 A = [], 5943 !, 5944 p_nil 5945 ; 5946 ( 5947 ( 5948 string(A) 5949 -> 5950 true 5951 ; 5952 atom(A) 5953 ), 5954 p_atomstring 5955 ; 5956 ( 5957 nonvar(A), 5958 A = [B|C], 5959 !, 5960 p_list 5961 ; 5962 ( 5963 compound(A), 5964 p_struct 5965 ; 5966 is_handle(A), 5967 p_handle 5968 ) 5969 ) 5970 ) 5971 ) 5972 ) 5973 ) 5974 ). 5975 5976INDEXES for (semidet) disjunction [2] 59771. Quality 1.0 5978 [] - [] 5979 [handle] - [8] 5980 [list] - [6] 5981 [[]] - [4] 5982 [structure] - [7] 5983 [atom] - [5] 5984 [var] - [1] 5985 [breal] - [3] 5986 [rational] - [2] 5987 [integer] - [2] 5988 [bignum] - [2] 5989 [string] - [5] 5990 [double] - [2] 5991Branch determinisms for disjunction [2] 5992 Branch 1: det 5993 Branch 2: det 5994 Branch 3: det 5995 Branch 4: det 5996 Branch 5: det 5997 Branch 6: det 5998 Branch 7: det 5999 Branch 8: det 6000INDEXES for (semidet) disjunction [2, 2, 2] 60011. Quality 0.8 6002 [] - [] 6003 [rational] - [3] 6004 [integer] - [1] 6005 [bignum] - [1] 6006 [double] - [2] 6007Branch determinisms for disjunction [2, 2, 2] 6008 Branch 1: det 6009 Branch 2: det 6010 Branch 3: det 6011INDEXES for (semidet) disjunction [2, 5, 2] 60121. Quality 0.7 6013 [] - [] 6014 [[]] - [2] 6015 [atom] - [2] 6016 [string] - [1] 6017Branch determinisms for disjunction [2, 5, 2] 6018 Branch 1: det 6019 Branch 2: det 6020p / 1: 6021label(1): 6022 switch_on_type a(1) 6023 meta: ref(32) 6024 []: ref(33) 6025 atom: ref(18) 6026 bignum: ref(5) 6027 breal: ref(34) 6028 double: ref(5) 6029 goal: ref(fail) 6030 handle: ref(35) 6031 integer: ref(5) 6032 list: ref(36) 6033 rational: ref(5) 6034 string: ref(18) 6035 structure: ref(37) 6036 6037 branch ref(32) 6038label(3): 6039 bi_var a(1) 6040label(32): 6041 jmp p_var / 0 6042label(5): 6043 switch_on_type a(1) 6044 meta: ref(fail) 6045 []: ref(fail) 6046 atom: ref(fail) 6047 bignum: ref(40) 6048 breal: ref(fail) 6049 double: ref(41) 6050 goal: ref(fail) 6051 handle: ref(fail) 6052 integer: ref(40) 6053 list: ref(fail) 6054 rational: ref(42) 6055 string: ref(fail) 6056 structure: ref(fail) 6057 6058 branch ref(fail) 6059label(7): 6060 bi_integer a(1) 6061label(40): 6062 jmp p_intfloatrat / 0 6063label(9): 6064 bi_float a(1) 6065label(41): 6066 jmp p_intfloatrat / 0 6067label(11): 6068 bi_rational a(1) 6069label(42): 6070 jmp p_intfloatrat / 0 6071label(14): 6072 bi_breal a(1) 6073label(34): 6074 jmp p_breal / 0 6075label(16): 6076 bi_nonvar a(1) 6077label(33): 6078 get_nil a(1) 6079 jmp p_nil / 0 6080label(18): 6081 switch_on_type a(1) 6082 meta: ref(fail) 6083 []: ref(38) 6084 atom: ref(38) 6085 bignum: ref(fail) 6086 breal: ref(fail) 6087 double: ref(fail) 6088 goal: ref(fail) 6089 handle: ref(fail) 6090 integer: ref(fail) 6091 list: ref(fail) 6092 rational: ref(fail) 6093 string: ref(39) 6094 structure: ref(fail) 6095 6096 branch ref(fail) 6097label(20): 6098 bi_string a(1) 6099label(39): 6100 jmp p_atomstring / 0 6101label(22): 6102 bi_atom a(1) 6103label(38): 6104 jmp p_atomstring / 0 6105label(25): 6106 bi_nonvar a(1) 6107label(36): 6108 get_list a(1) ref(26) 6109 write_void 2 6110label(26): 6111 jmp p_list / 0 6112label(28): 6113 bi_compound a(1) 6114label(37): 6115 jmp p_struct / 0 6116label(30): 6117 bi_is_handle a(1) 6118label(35): 6119 jmp p_handle / 0 6120 6121------ Test idx(70) ------- 6122p(f(A), A) :- 6123 atom(A). 6124p(g(A), A) :- 6125 atom(A). 6126 6127INDEXES for (nondet) disjunction [2] 61281. Quality 1.3 6129 [] - [] 6130 [structure] - [] 6131 [structure, f / 1] - [1] 6132 [structure, g / 1] - [2] 6133 [var] - [1, 2] 61342. Quality 2.0 6135 [] - [] 6136 [[]] - [1, 2] 6137 [var] - [1, 2] 6138 [atom] - [1, 2] 6139Branch determinisms for disjunction [2] 6140 Branch 1: try 6141 Branch 2: trust 6142p / 2: 6143label(1): 6144 functor_switch a(1) 6145 f / 1: ref(5) 6146 g / 1: ref(9) 6147 default: ref(fail) 6148 6149label(3): 6150 try_me_else 0 2 ref(7) 6151label(4): 6152 get_structure a(1) f / 1 ref(5) 6153 write_value a(2) 6154 bi_atom a(2) 6155 ret 6156label(5): 6157 read_value a(2) 6158 bi_atom a(2) 6159 ret 6160label(7): 6161 trust_me 0 6162label(8): 6163 get_structure a(1) g / 1 ref(9) 6164 write_value a(2) 6165 bi_atom a(2) 6166 ret 6167label(9): 6168 read_value a(2) 6169 bi_atom a(2) 6170 ret 6171 6172------ Test idx(71) ------- 6173p(A, B) :- 6174 A = B, 6175 atom(B). 6176p(A, B) :- 6177 A = B, 6178 integer(B). 6179 6180INDEXES for (nondet) disjunction [2] 61811. Quality 1.3 6182 [] - [] 6183 [[]] - [1] 6184 [var] - [1, 2] 6185 [atom] - [1] 6186 [integer] - [2] 6187 [bignum] - [2] 6188Branch determinisms for disjunction [2] 6189 Branch 1: try 6190 Branch 2: trust 6191p / 2: 6192label(1): 6193 switch_on_type a(2) 6194 meta: ref(2) 6195 []: ref(3) 6196 atom: ref(3) 6197 bignum: ref(5) 6198 breal: ref(fail) 6199 double: ref(fail) 6200 goal: ref(fail) 6201 handle: ref(fail) 6202 integer: ref(5) 6203 list: ref(fail) 6204 rational: ref(fail) 6205 string: ref(fail) 6206 structure: ref(fail) 6207 6208label(2): 6209 try_me_else 0 2 ref(4) 6210label(3): 6211 get_value a(1) a(2) 6212 bi_atom a(2) 6213 ret 6214label(4): 6215 trust_me 0 6216label(5): 6217 get_value a(1) a(2) 6218 bi_integer a(2) 6219 ret 6220 6221------ Test idx(72) ------- 6222p(A / B, A, B) :- 6223 atom(A), 6224 integer(B), 6225 B >= 0. 6226p(A // B, A, B) :- 6227 atom(A), 6228 integer(B), 6229 B >= 0. 6230 6231INDEXES for (nondet) disjunction [2] 62321. Quality 1.3 6233 [] - [] 6234 [structure] - [] 6235 [structure, / / 2] - [1] 6236 [structure, // / 2] - [2] 6237 [var] - [1, 2] 62382. Quality 2.0 6239 [] - [] 6240 [[]] - [1, 2] 6241 [var] - [1, 2] 6242 [atom] - [1, 2] 62433. Quality 2.0 6244 [] - [] 6245 [var] - [1, 2] 6246 [integer] - [1, 2] 6247 [bignum] - [1, 2] 6248Branch determinisms for disjunction [2] 6249 Branch 1: try 6250 Branch 2: trust 6251p / 3: 6252label(1): 6253 functor_switch a(1) 6254 (/) / 2: ref(5) 6255 (//) / 2: ref(9) 6256 default: ref(fail) 6257 6258label(3): 6259 try_me_else 0 3 ref(7) 6260label(4): 6261 get_structure a(1) (/) / 2 ref(5) 6262 write_value a(2) 6263 write_value a(3) 6264 branch ref(6) 6265label(5): 6266 read_value a(2) 6267 read_value a(3) 6268label(6): 6269 bi_atom a(2) 6270 bi_integer a(3) 6271 put_integer a(1) 0 6272 bi_ge a(3) a(1) eclipse 48 6273 ret 6274label(7): 6275 trust_me 0 6276label(8): 6277 get_structure a(1) (//) / 2 ref(9) 6278 write_value a(2) 6279 write_value a(3) 6280 branch ref(10) 6281label(9): 6282 read_value a(2) 6283 read_value a(3) 6284label(10): 6285 bi_atom a(2) 6286 bi_integer a(3) 6287 put_integer a(1) 0 6288 bi_ge a(3) a(1) eclipse 48 6289 ret 6290 6291------ Test idx(100) ------- 6292p(1) :- 6293 -?-> 6294 p_1. 6295p(2) :- 6296 -?-> 6297 p_2. 6298 6299INDEXES for (semidet) disjunction [2] 63001. Quality 0.7 6301 [] - [] 6302 [integer] - [] 6303 [integer, 1] - [1] 6304 [integer, 2] - [2] 6305Branch determinisms for disjunction [2] 6306 Branch 1: det 6307 Branch 2: det 6308p / 1: 6309label(1): 6310 integer_switch a(1) 6311 1: ref(7) 6312 2: ref(8) 6313 default: ref(fail) 6314 6315 branch ref(fail) 6316label(3): 6317 in_get_integer a(1) 1 6318label(7): 6319 jmp p_1 / 0 6320label(5): 6321 in_get_integer a(1) 2 6322label(8): 6323 jmp p_2 / 0 6324 6325------ Test idx(101) ------- 6326p(1) :- 6327 -?-> 6328 p_integer. 6329p(10000000000000000000) :- 6330 -?-> 6331 p_big. 6332p(1.1) :- 6333 -?-> 6334 p_float. 6335p(5_2) :- 6336 -?-> 6337 p_rational. 6338p(0.9__1.1) :- 6339 -?-> 6340 p_breal. 6341p("hello") :- 6342 -?-> 6343 p_string. 6344p(hello) :- 6345 -?-> 6346 p_atom. 6347p([]) :- 6348 -?-> 6349 p_nil. 6350p([A|B]) :- 6351 -?-> 6352 p_list. 6353p(foo(bar)) :- 6354 -?-> 6355 p_struct. 6356 6357INDEXES for (semidet) disjunction [2] 63581. Quality 0.9 6359 [] - [] 6360 [list] - [9] 6361 [[]] - [8] 6362 [structure] - [] 6363 [structure, foo / 1] - [10] 6364 [atom] - [] 6365 [atom, hello] - [7] 6366 [breal] - [5] 6367 [rational] - [4] 6368 [bignum] - [2] 6369 [integer] - [] 6370 [integer, 1] - [1] 6371 [string] - [6] 6372 [double] - [3] 6373Branch determinisms for disjunction [2] 6374 Branch 1: det 6375 Branch 2: det 6376 Branch 3: det 6377 Branch 4: det 6378 Branch 5: det 6379 Branch 6: det 6380 Branch 7: det 6381 Branch 8: det 6382 Branch 9: det 6383 Branch 10: det 6384p / 1: 6385label(1): 6386 switch_on_type a(1) 6387 meta: ref(fail) 6388 []: ref(25) 6389 atom: ref(15) 6390 bignum: ref(5) 6391 breal: ref(11) 6392 double: ref(7) 6393 goal: ref(fail) 6394 handle: ref(fail) 6395 integer: ref(3) 6396 list: ref(19) 6397 rational: ref(9) 6398 string: ref(13) 6399 structure: ref(22) 6400 6401 branch ref(fail) 6402label(3): 6403 in_get_integer a(1) 1 6404 jmp p_integer / 0 6405label(5): 6406 in_get_constant a(1) 10000000000000000000 6407 jmp p_big / 0 6408label(7): 6409 in_get_constant a(1) 1.1 6410 jmp p_float / 0 6411label(9): 6412 in_get_constant a(1) 5_2 6413 jmp p_rational / 0 6414label(11): 6415 in_get_constant a(1) 0.9__1.1 6416 jmp p_breal / 0 6417label(13): 6418 in_get_string a(1) "hello" 6419 jmp p_string / 0 6420label(15): 6421 in_get_atom a(1) hello 6422 jmp p_atom / 0 6423label(17): 6424 in_get_nil a(1) 6425label(25): 6426 jmp p_nil / 0 6427label(19): 6428 in_get_list a(1) ref(20) 6429label(20): 6430 jmp p_list / 0 6431label(22): 6432 in_get_structure a(1) foo / 1 ref(23) 6433label(23): 6434 read_test_var 6435 read_atom bar 6436 jmp p_struct / 0 6437 6438------ Test idx(102) ------- 6439p(a, 1). 6440p(b, 2). 6441p(c, 3). 6442 6443INDEXES for (nondet) disjunction [2] 64441. Quality 1.5 6445 [] - [] 6446 [atom] - [] 6447 [atom, a] - [1] 6448 [atom, b] - [2] 6449 [atom, c] - [3] 6450 [var] - [1, 2, 3] 64512. Quality 1.5 6452 [] - [] 6453 [var] - [1, 2, 3] 6454 [integer] - [] 6455 [integer, 1] - [1] 6456 [integer, 2] - [2] 6457 [integer, 3] - [3] 6458Branch determinisms for disjunction [2] 6459 Branch 1: try 6460 Branch 2: retry 6461 Branch 3: trust 6462p / 2: 6463label(1): 6464 atom_switch a(1) 6465 a: ref(10) 6466 b: ref(11) 6467 c: ref(12) 6468 default: ref(fail) 6469 6470 integer_switch a(2) 6471 1: ref(4) 6472 2: ref(6) 6473 3: ref(8) 6474 default: ref(fail) 6475 6476label(3): 6477 try_me_else 0 2 ref(5) 6478label(4): 6479 get_atom a(1) a 6480label(10): 6481 get_integer a(2) 1 6482 ret 6483label(5): 6484 retry_me_else 0 ref(7) 6485label(6): 6486 get_atom a(1) b 6487label(11): 6488 get_integer a(2) 2 6489 ret 6490label(7): 6491 trust_me 0 6492label(8): 6493 get_atom a(1) c 6494label(12): 6495 get_integer a(2) 3 6496 ret 6497 6498------ Test idx(103) ------- 6499p(1) :- 6500 -?-> 6501 p_small1. 6502p(2) :- 6503 -?-> 6504 p_small2. 6505p(10000000000) :- 6506 -?-> 6507 p_medium1. 6508p(20000000000) :- 6509 -?-> 6510 p_medium2. 6511p(10000000000000000000) :- 6512 -?-> 6513 p_big1. 6514p(20000000000000000000) :- 6515 -?-> 6516 p_big2. 6517 6518INDEXES for (nondet) disjunction [2] 65191. Quality 1.0 6520 [] - [] 6521 [bignum] - [5, 6] 6522 [integer] - [] 6523 [integer, 20000000000] - [4] 6524 [integer, 10000000000] - [3] 6525 [integer, 1] - [1] 6526 [integer, 2] - [2] 6527Branch determinisms for disjunction [2] 6528 Branch 1: det 6529 Branch 2: det 6530 Branch 3: det 6531 Branch 4: det 6532 Branch 5: try 6533 Branch 6: trust 6534p / 1: 6535label(1): 6536 switch_on_type a(1) 6537 meta: ref(fail) 6538 []: ref(fail) 6539 atom: ref(fail) 6540 bignum: ref(15) 6541 breal: ref(fail) 6542 double: ref(fail) 6543 goal: ref(fail) 6544 handle: ref(fail) 6545 integer: ref(16) 6546 list: ref(fail) 6547 rational: ref(fail) 6548 string: ref(fail) 6549 structure: ref(fail) 6550 6551 branch ref(fail) 6552label(3): 6553 in_get_integer a(1) 1 6554label(19): 6555 jmp p_small1 / 0 6556label(5): 6557 in_get_integer a(1) 2 6558label(20): 6559 jmp p_small2 / 0 6560label(7): 6561 in_get_integer a(1) 10000000000 6562label(18): 6563 jmp p_medium1 / 0 6564label(9): 6565 in_get_integer a(1) 20000000000 6566label(17): 6567 jmp p_medium2 / 0 6568label(11): 6569 in_get_constant a(1) 10000000000000000000 6570 jmp p_big1 / 0 6571label(13): 6572 in_get_constant a(1) 20000000000000000000 6573 jmp p_big2 / 0 6574label(15): 6575 try 0 1 ref(11) 6576 trust 0 ref(13) 6577label(16): 6578 integer_switch a(1) 6579 20000000000: ref(17) 6580 10000000000: ref(18) 6581 1: ref(19) 6582 2: ref(20) 6583 default: ref(fail) 6584 6585 6586------ Test idx(200) ------- 6587p(A, B, C) :- 6588 var(A), 6589 !, 6590 B = C. 6591p(a, A, B) :- 6592 !, 6593 a(A, B). 6594p(A, B, C) :- 6595 q(A, B, C). 6596 6597INDEXES for (semidet) disjunction [2] 65981. Quality 1.0 6599 [] - [3] 6600 [atom] - [3] 6601 [atom, a] - [2] 6602 [var] - [1] 6603Branch determinisms for disjunction [2] 6604 Branch 1: det 6605 Branch 2: det 6606 Branch 3: det 6607p / 3: 6608label(1): 6609 atom_switch a(1) 6610 a: ref(9) 6611 default: ref(7) 6612 6613label(3): 6614 bi_var a(1) 6615 get_value a(2) a(3) 6616 ret 6617label(5): 6618 get_atom a(1) a 6619label(9): 6620 shift a(1) a(2) a(3) 6621 jmp a / 2 6622label(7): 6623 jmp q / 3 6624 6625------ Test idx(201) ------- 6626p(A, B) :- 6627 +(A, 1, C), 6628 ( 6629 p1(C, B) 6630 ; 6631 p2(A, B) 6632 ). 6633 6634p / 2: 6635label(1): 6636 bi_addi a(1) 1 a(3) 24 6637 try_me_else 0 3 ref(3) 6638label(2): 6639 move a(3) a(1) 6640 jmp p1 / 2 6641label(3): 6642 trust_me 0 6643label(4): 6644 jmp p2 / 2 6645 6646------ Test idx(202) ------- 6647p(A, B) :- 6648 true, 6649 +(A, 1, C), 6650 ( 6651 p1(C, B) 6652 ; 6653 p2(C, B) 6654 ). 6655 6656p / 2: 6657label(1): 6658 get_variable 2 a(1) y(2) 6659 move a(2) y(1) 6660 callf true / 0 Y[1,2] 6661 move y(2) a(2) 6662 bi_addi a(2) 1 a(1) 24 6663 try_me_else 0 1 ref(3) 6664label(2): 6665 move_chain y(1) a(2) p1 / 2 6666label(3): 6667 trust_me_inline 0 Y[1] 6668label(4): 6669 move_chain y(1) a(2) p2 / 2 6670 6671------ Test idx(203) ------- 6672p(A, B) :- 6673 true, 6674 +(A, 1, C), 6675 ( 6676 p1(C, B) 6677 ; 6678 p2(C, C, B) 6679 ). 6680 6681p / 2: 6682label(1): 6683 get_variable 2 a(1) y(2) 6684 move a(2) y(1) 6685 callf true / 0 Y[1,2] 6686 move y(2) a(2) 6687 bi_addi a(2) 1 a(1) 24 6688 try_me_else 0 1 ref(3) 6689label(2): 6690 move_chain y(1) a(2) p1 / 2 6691label(3): 6692 trust_me_inline 0 Y[1] 6693label(4): 6694 move a(1) a(2) 6695 move_chain y(1) a(3) p2 / 3 6696 6697------ Test idx(204) ------- 6698p(A, B) :- 6699 true, 6700 +(A, 1, C), 6701 integer(C), 6702 ( 6703 p1(C, B) 6704 ; 6705 p2(C, B) 6706 ). 6707 6708p / 2: 6709label(1): 6710 get_variable 2 a(1) y(2) 6711 move a(2) y(1) 6712 callf true / 0 Y[1,2] 6713 move y(2) a(2) 6714 bi_addi a(2) 1 a(1) 24 6715 bi_integer a(1) 6716 try_me_else 0 1 ref(3) 6717label(2): 6718 move_chain y(1) a(2) p1 / 2 6719label(3): 6720 trust_me_inline 0 Y[1] 6721label(4): 6722 move_chain y(1) a(2) p2 / 2 6723 6724------ Test idx(300) ------- 6725p(A) :- 6726 ( 6727 A = 1, 6728 p1 6729 ; 6730 A = 2, 6731 p2 6732 ), 6733 q(A). 6734 6735INDEXES for (nondet) disjunction [2] 67361. Quality 1.3 6737 [] - [] 6738 [var] - [1, 2] 6739 [integer] - [] 6740 [integer, 1] - [1] 6741 [integer, 2] - [2] 6742Branch determinisms for disjunction [2] 6743 Branch 1: try 6744 Branch 2: trust 6745p / 1: 6746label(1): 6747 integer_switch a(1) 6748 1: ref(7) 6749 2: ref(8) 6750 default: ref(fail) 6751 6752label(2): 6753 try_me_else 0 1 ref(4) 6754label(3): 6755 get_integer a(1) 1 6756label(7): 6757 get_variable 1 a(1) y(1) 6758 callf p1 / 0 Y[1] 6759 move_chain y(1) a(1) q / 1 6760label(4): 6761 trust_me 0 6762label(5): 6763 get_integer a(1) 2 6764label(8): 6765 get_variable 1 a(1) y(1) 6766 callf p2 / 0 Y[1] 6767 move_chain y(1) a(1) q / 1 6768 6769------ Test head(100) ------- 6770p(a) :- 6771 q. 6772 6773p / 1: 6774label(1): 6775 get_atom a(1) a 6776 jmp q / 0 6777 6778------ Test head(101) ------- 6779p(a, A, 3) :- 6780 q. 6781 6782p / 3: 6783label(1): 6784 get_atom a(1) a 6785 get_integer a(3) 3 6786 jmp q / 0 6787 6788------ Test head(102) ------- 6789p(A, A) :- 6790 q. 6791 6792p / 2: 6793label(1): 6794 get_value a(2) a(1) 6795 jmp q / 0 6796 6797------ Test head(103) ------- 6798p(a, A, B, 3.5, 5_2, "hello", A) :- 6799 q. 6800 6801p / 7: 6802label(1): 6803 get_atom a(1) a 6804 get_constant a(4) 3.5 6805 get_constant a(5) 5_2 6806 get_string a(6) "hello" 6807 get_value a(7) a(2) 6808 jmp q / 0 6809 6810------ Test head(1) ------- 6811p(f(1)) :- 6812 q. 6813 6814p / 1: 6815label(1): 6816 get_structure a(1) f / 1 ref(2) 6817 write_integer 1 6818 jmp q / 0 6819label(2): 6820 read_integer 1 6821 jmp q / 0 6822 6823------ Test head(2) ------- 6824p(f(1, 2)) :- 6825 q. 6826 6827p / 1: 6828label(1): 6829 get_structure a(1) f / 2 ref(2) 6830 write_integer2 1 2 6831 jmp q / 0 6832label(2): 6833 read_integer 1 6834 read_integer 2 6835 jmp q / 0 6836 6837------ Test head(3) ------- 6838p(f(g(1))) :- 6839 q. 6840 6841p / 1: 6842label(1): 6843 get_structure a(1) f / 1 ref(3) 6844 write_structure g / 1 6845label(2): 6846 write_integer 1 6847 jmp q / 0 6848label(3): 6849 read_last_structure g / 1 ref(2) 6850 read_integer 1 6851 jmp q / 0 6852 6853------ Test head(4) ------- 6854p(f(g(1), h(2))) :- 6855 q. 6856 6857p / 1: 6858label(1): 6859 get_structure a(1) f / 2 ref(4) 6860 write_first_structure g / 1 6861label(2): 6862 write_integer 1 6863 mode t(0) ref(5) 6864 write_structure h / 1 6865label(3): 6866 write_integer 2 6867 space -1 6868 jmp q / 0 6869label(4): 6870 read_structure g / 1 ref(2) 6871 read_integer 1 6872 mode t(0) 6873label(5): 6874 read_last_structure h / 1 ref(3) 6875 read_integer 2 6876 space -1 6877 jmp q / 0 6878 6879------ Test head(5) ------- 6880p(f(g(1), h(2), i(3))) :- 6881 q. 6882 6883p / 1: 6884label(1): 6885 get_structure a(1) f / 3 ref(5) 6886 write_first_structure g / 1 6887label(2): 6888 write_integer 1 6889 write_next_structure h / 1 t(0) ref(6) 6890label(3): 6891 write_integer 2 6892 mode t(0) ref(7) 6893 write_structure i / 1 6894label(4): 6895 write_integer 3 6896 space -1 6897 jmp q / 0 6898label(5): 6899 read_structure g / 1 ref(2) 6900 read_integer 1 6901label(6): 6902 read_next_structure h / 1 t(0) ref(3) 6903 read_integer 2 6904 mode t(0) 6905label(7): 6906 read_last_structure i / 1 ref(4) 6907 read_integer 3 6908 space -1 6909 jmp q / 0 6910 6911------ Test head(6) ------- 6912p(f(4, g(1), h(2), i(3))) :- 6913 q. 6914 6915p / 1: 6916label(1): 6917 get_structure a(1) f / 4 ref(5) 6918 write_integer 4 6919 write_first_structure g / 1 6920label(2): 6921 write_integer 1 6922 write_next_structure h / 1 t(0) ref(6) 6923label(3): 6924 write_integer 2 6925 mode t(0) ref(7) 6926 write_structure i / 1 6927label(4): 6928 write_integer 3 6929 space -1 6930 jmp q / 0 6931label(5): 6932 read_integer 4 6933 read_structure g / 1 ref(2) 6934 read_integer 1 6935label(6): 6936 read_next_structure h / 1 t(0) ref(3) 6937 read_integer 2 6938 mode t(0) 6939label(7): 6940 read_last_structure i / 1 ref(4) 6941 read_integer 3 6942 space -1 6943 jmp q / 0 6944 6945------ Test head(7) ------- 6946p(f(4, g(1), 5, h(2), i(3))) :- 6947 q. 6948 6949p / 1: 6950label(1): 6951 get_structure a(1) f / 5 ref(5) 6952 write_integer 4 6953 write_first_structure g / 1 6954label(2): 6955 write_integer 1 6956 mode t(0) ref(6) 6957 write_integer 5 6958 write_next_structure h / 1 t(0) 6959label(3): 6960 write_integer 2 6961 mode t(0) ref(7) 6962 write_structure i / 1 6963label(4): 6964 write_integer 3 6965 space -1 6966 jmp q / 0 6967label(5): 6968 read_integer 4 6969 read_structure g / 1 ref(2) 6970 read_integer 1 6971 mode t(0) 6972label(6): 6973 read_integer 5 6974 read_structure h / 1 t(0) ref(3) 6975 read_integer 2 6976 mode t(0) 6977label(7): 6978 read_last_structure i / 1 ref(4) 6979 read_integer 3 6980 space -1 6981 jmp q / 0 6982 6983------ Test head(8) ------- 6984p(f(4, g(1), 5, h(2), 6, i(3))) :- 6985 q. 6986 6987p / 1: 6988label(1): 6989 get_structure a(1) f / 6 ref(5) 6990 write_integer 4 6991 write_first_structure g / 1 6992label(2): 6993 write_integer 1 6994 mode t(0) ref(6) 6995 write_integer 5 6996 write_next_structure h / 1 t(0) 6997label(3): 6998 write_integer 2 6999 mode t(0) ref(7) 7000 write_integer 6 7001 write_structure i / 1 7002label(4): 7003 write_integer 3 7004 space -1 7005 jmp q / 0 7006label(5): 7007 read_integer 4 7008 read_structure g / 1 ref(2) 7009 read_integer 1 7010 mode t(0) 7011label(6): 7012 read_integer 5 7013 read_structure h / 1 t(0) ref(3) 7014 read_integer 2 7015 mode t(0) 7016label(7): 7017 read_integer 6 7018 read_last_structure i / 1 ref(4) 7019 read_integer 3 7020 space -1 7021 jmp q / 0 7022 7023------ Test head(9) ------- 7024p(f(4, g(1), 5, h(2), 6, i(3), 7)) :- 7025 q. 7026 7027p / 1: 7028label(1): 7029 get_structure a(1) f / 7 ref(5) 7030 write_integer 4 7031 write_first_structure g / 1 7032label(2): 7033 write_integer 1 7034 mode t(0) ref(6) 7035 write_integer 5 7036 write_next_structure h / 1 t(0) 7037label(3): 7038 write_integer 2 7039 mode t(0) ref(7) 7040 write_integer 6 7041 write_next_structure i / 1 t(0) 7042label(4): 7043 write_integer 3 7044 mode t(0) ref(8) 7045 write_integer 7 7046 space -1 7047 jmp q / 0 7048label(5): 7049 read_integer 4 7050 read_structure g / 1 ref(2) 7051 read_integer 1 7052 mode t(0) 7053label(6): 7054 read_integer 5 7055 read_structure h / 1 t(0) ref(3) 7056 read_integer 2 7057 mode t(0) 7058label(7): 7059 read_integer 6 7060 read_structure i / 1 t(0) ref(4) 7061 read_integer 3 7062 mode t(0) 7063label(8): 7064 read_integer 7 7065 space -1 7066 jmp q / 0 7067 7068------ Test head(10) ------- 7069p(f(4, g(1), 5, h(2), 6, i(3), 7)) :- 7070 q. 7071 7072p / 1: 7073label(1): 7074 get_structure a(1) f / 7 ref(5) 7075 write_integer 4 7076 write_first_structure g / 1 7077label(2): 7078 write_integer 1 7079 mode t(0) ref(6) 7080 write_integer 5 7081 write_next_structure h / 1 t(0) 7082label(3): 7083 write_integer 2 7084 mode t(0) ref(7) 7085 write_integer 6 7086 write_next_structure i / 1 t(0) 7087label(4): 7088 write_integer 3 7089 mode t(0) ref(8) 7090 write_integer 7 7091 space -1 7092 jmp q / 0 7093label(5): 7094 read_integer 4 7095 read_structure g / 1 ref(2) 7096 read_integer 1 7097 mode t(0) 7098label(6): 7099 read_integer 5 7100 read_structure h / 1 t(0) ref(3) 7101 read_integer 2 7102 mode t(0) 7103label(7): 7104 read_integer 6 7105 read_structure i / 1 t(0) ref(4) 7106 read_integer 3 7107 mode t(0) 7108label(8): 7109 read_integer 7 7110 space -1 7111 jmp q / 0 7112 7113------ Test head(11) ------- 7114p(f(4, g(1), 5, h(2), 6, i(3), 7, 8)) :- 7115 q. 7116 7117p / 1: 7118label(1): 7119 get_structure a(1) f / 8 ref(5) 7120 write_integer 4 7121 write_first_structure g / 1 7122label(2): 7123 write_integer 1 7124 mode t(0) ref(6) 7125 write_integer 5 7126 write_next_structure h / 1 t(0) 7127label(3): 7128 write_integer 2 7129 mode t(0) ref(7) 7130 write_integer 6 7131 write_next_structure i / 1 t(0) 7132label(4): 7133 write_integer 3 7134 mode t(0) ref(8) 7135 write_integer2 7 8 7136 space -1 7137 jmp q / 0 7138label(5): 7139 read_integer 4 7140 read_structure g / 1 ref(2) 7141 read_integer 1 7142 mode t(0) 7143label(6): 7144 read_integer 5 7145 read_structure h / 1 t(0) ref(3) 7146 read_integer 2 7147 mode t(0) 7148label(7): 7149 read_integer 6 7150 read_structure i / 1 t(0) ref(4) 7151 read_integer 3 7152 mode t(0) 7153label(8): 7154 read_integer 7 7155 read_integer 8 7156 space -1 7157 jmp q / 0 7158 7159------ Test head(12) ------- 7160p(f(g(1), 5, h(2), 6, i(3), 7, 8)) :- 7161 q. 7162 7163p / 1: 7164label(1): 7165 get_structure a(1) f / 7 ref(5) 7166 write_first_structure g / 1 7167label(2): 7168 write_integer 1 7169 mode t(0) ref(6) 7170 write_integer 5 7171 write_next_structure h / 1 t(0) 7172label(3): 7173 write_integer 2 7174 mode t(0) ref(7) 7175 write_integer 6 7176 write_next_structure i / 1 t(0) 7177label(4): 7178 write_integer 3 7179 mode t(0) ref(8) 7180 write_integer2 7 8 7181 space -1 7182 jmp q / 0 7183label(5): 7184 read_structure g / 1 ref(2) 7185 read_integer 1 7186 mode t(0) 7187label(6): 7188 read_integer 5 7189 read_structure h / 1 t(0) ref(3) 7190 read_integer 2 7191 mode t(0) 7192label(7): 7193 read_integer 6 7194 read_structure i / 1 t(0) ref(4) 7195 read_integer 3 7196 mode t(0) 7197label(8): 7198 read_integer 7 7199 read_integer 8 7200 space -1 7201 jmp q / 0 7202 7203------ Test head(13) ------- 7204p(f(g(1), h(2), 6, i(3), 7, 8)) :- 7205 q. 7206 7207p / 1: 7208label(1): 7209 get_structure a(1) f / 6 ref(5) 7210 write_first_structure g / 1 7211label(2): 7212 write_integer 1 7213 write_next_structure h / 1 t(0) ref(6) 7214label(3): 7215 write_integer 2 7216 mode t(0) ref(7) 7217 write_integer 6 7218 write_next_structure i / 1 t(0) 7219label(4): 7220 write_integer 3 7221 mode t(0) ref(8) 7222 write_integer2 7 8 7223 space -1 7224 jmp q / 0 7225label(5): 7226 read_structure g / 1 ref(2) 7227 read_integer 1 7228label(6): 7229 read_next_structure h / 1 t(0) ref(3) 7230 read_integer 2 7231 mode t(0) 7232label(7): 7233 read_integer 6 7234 read_structure i / 1 t(0) ref(4) 7235 read_integer 3 7236 mode t(0) 7237label(8): 7238 read_integer 7 7239 read_integer 8 7240 space -1 7241 jmp q / 0 7242 7243------ Test head(14) ------- 7244p(f(g(1), h(2), i(3), 7, 8)) :- 7245 q. 7246 7247p / 1: 7248label(1): 7249 get_structure a(1) f / 5 ref(5) 7250 write_first_structure g / 1 7251label(2): 7252 write_integer 1 7253 write_next_structure h / 1 t(0) ref(6) 7254label(3): 7255 write_integer 2 7256 write_next_structure i / 1 t(0) ref(7) 7257label(4): 7258 write_integer 3 7259 mode t(0) ref(8) 7260 write_integer2 7 8 7261 space -1 7262 jmp q / 0 7263label(5): 7264 read_structure g / 1 ref(2) 7265 read_integer 1 7266label(6): 7267 read_next_structure h / 1 t(0) ref(3) 7268 read_integer 2 7269label(7): 7270 read_next_structure i / 1 t(0) ref(4) 7271 read_integer 3 7272 mode t(0) 7273label(8): 7274 read_integer 7 7275 read_integer 8 7276 space -1 7277 jmp q / 0 7278 7279------ Test head(15) ------- 7280p(f(g(1), h(2), i(3), 8)) :- 7281 q. 7282 7283p / 1: 7284label(1): 7285 get_structure a(1) f / 4 ref(5) 7286 write_first_structure g / 1 7287label(2): 7288 write_integer 1 7289 write_next_structure h / 1 t(0) ref(6) 7290label(3): 7291 write_integer 2 7292 write_next_structure i / 1 t(0) ref(7) 7293label(4): 7294 write_integer 3 7295 mode t(0) ref(8) 7296 write_integer 8 7297 space -1 7298 jmp q / 0 7299label(5): 7300 read_structure g / 1 ref(2) 7301 read_integer 1 7302label(6): 7303 read_next_structure h / 1 t(0) ref(3) 7304 read_integer 2 7305label(7): 7306 read_next_structure i / 1 t(0) ref(4) 7307 read_integer 3 7308 mode t(0) 7309label(8): 7310 read_integer 8 7311 space -1 7312 jmp q / 0 7313 7314------ Test head(16) ------- 7315p(A, B) :- 7316 A = f(B, C), 7317 q(A, C). 7318 7319p / 2: 7320label(1): 7321 get_structure a(1) f / 2 ref(2) 7322 write_value a(2) 7323 write_variable a(2) 7324 jmp q / 2 7325label(2): 7326 read_value a(2) 7327 read_variable a(2) 7328 jmp q / 2 7329 7330------ Test head(17) ------- 7331p(A, B) :- 7332 A = f(C, B), 7333 q(A, C). 7334 7335p / 2: 7336label(1): 7337 get_structure a(1) f / 2 ref(2) 7338 move a(2) a(3) 7339 write_variable a(2) 7340 write_value a(3) 7341 jmp q / 2 7342label(2): 7343 move a(2) a(3) 7344 read_variable a(2) 7345 read_value a(3) 7346 jmp q / 2 7347 7348------ Test head(18) ------- 7349p(A, B) :- 7350 A = f(g(B), C), 7351 q(A, C). 7352 7353p / 2: 7354label(1): 7355 get_structure a(1) f / 2 ref(3) 7356 write_first_structure g / 1 7357label(2): 7358 write_value a(2) 7359 mode t(0) ref(4) 7360 write_variable a(2) 7361 space -1 7362 jmp q / 2 7363label(3): 7364 read_structure g / 1 ref(2) 7365 read_value a(2) 7366 mode t(0) 7367label(4): 7368 read_variable a(2) 7369 space -1 7370 jmp q / 2 7371 7372------ Test head(19) ------- 7373p(f(A)) :- 7374 q, 7375 r(A). 7376 7377p / 1: 7378label(1): 7379 allocate 1 7380 get_structure a(1) f / 1 ref(2) 7381 write_variable y(1) 7382 branch ref(3) 7383label(2): 7384 read_variable y(1) 7385label(3): 7386 callf q / 0 Y[1] 7387 move_chain y(1) a(1) r / 1 7388 7389------ Test head(20) ------- 7390p(f(A, A)) :- 7391 q, 7392 r(A). 7393 7394p / 1: 7395label(1): 7396 allocate 1 7397 get_structure a(1) f / 2 ref(2) 7398 write_variable y(1) 7399 write_value y(1) 7400 branch ref(3) 7401label(2): 7402 read_variable y(1) 7403 read_value y(1) 7404label(3): 7405 callf q / 0 Y[1] 7406 move_chain y(1) a(1) r / 1 7407 7408------ Test head(20) ------- 7409p([g(1), h(2)]) :- 7410 q. 7411 7412p / 1: 7413label(1): 7414 get_list a(1) ref(5) 7415 write_first_structure g / 1 7416label(2): 7417 write_integer 1 7418 mode t(0) ref(6) 7419 write_list 7420label(3): 7421 write_first_structure h / 1 7422label(4): 7423 write_integer 2 7424 mode t(0) ref(7) 7425 write_nil 7426 space -2 7427 jmp q / 0 7428label(5): 7429 read_structure g / 1 ref(2) 7430 read_integer 1 7431 mode t(0) 7432label(6): 7433 read_last_list ref(3) 7434 read_structure h / 1 ref(4) 7435 read_integer 2 7436 mode t(0) 7437label(7): 7438 read_nil 7439 space -2 7440 jmp q / 0 7441 7442------ Test head(21) ------- 7443p([[1, 2], [3|A], [4, 5], c]) :- 7444 q(A). 7445 7446p / 1: 7447label(1): 7448 get_list a(1) ref(10) 7449 write_first_list 7450label(2): 7451 write_integer 1 7452 write_list 7453label(3): 7454 write_integer 2 7455 write_nil 7456 mode t(0) ref(11) 7457 write_list 7458label(4): 7459 write_first_list 7460label(5): 7461 write_integer 3 7462 write_variable a(1) 7463 mode t(0) ref(12) 7464 write_list 7465label(6): 7466 write_first_list 7467label(7): 7468 write_integer 4 7469 write_list 7470label(8): 7471 write_integer 5 7472 write_nil 7473 mode t(0) ref(13) 7474 write_list 7475label(9): 7476 write_atom c 7477 write_nil 7478 space -3 7479 jmp q / 1 7480label(10): 7481 read_list ref(2) 7482 read_integer 1 7483 read_last_list ref(3) 7484 read_integer 2 7485 read_nil 7486 mode t(0) 7487label(11): 7488 read_last_list ref(4) 7489 read_list ref(5) 7490 read_integer 3 7491 read_variable a(1) 7492 mode t(0) 7493label(12): 7494 read_last_list ref(6) 7495 read_list ref(7) 7496 read_integer 4 7497 read_last_list ref(8) 7498 read_integer 5 7499 read_nil 7500 mode t(0) 7501label(13): 7502 read_last_list ref(9) 7503 read_atom c 7504 read_nil 7505 space -3 7506 jmp q / 1 7507 7508------ Test head(22) ------- 7509p([a, [1, 2], [3, 4], b, [5|A], c]) :- 7510 q(A). 7511 7512p / 1: 7513label(1): 7514 get_list a(1) ref(12) 7515 write_atom a 7516 write_list 7517label(2): 7518 write_first_list 7519label(3): 7520 write_integer 1 7521 write_list 7522label(4): 7523 write_integer 2 7524 write_nil 7525 mode t(0) ref(13) 7526 write_list 7527label(5): 7528 write_first_list 7529label(6): 7530 write_integer 3 7531 write_list 7532label(7): 7533 write_integer 4 7534 write_nil 7535 mode t(0) ref(14) 7536 write_list 7537label(8): 7538 write_atom b 7539 write_list 7540label(9): 7541 write_first_list 7542label(10): 7543 write_integer 5 7544 write_variable a(1) 7545 mode t(0) ref(15) 7546 write_list 7547label(11): 7548 write_atom c 7549 write_nil 7550 space -3 7551 jmp q / 1 7552label(12): 7553 read_atom a 7554 read_last_list ref(2) 7555 read_list ref(3) 7556 read_integer 1 7557 read_last_list ref(4) 7558 read_integer 2 7559 read_nil 7560 mode t(0) 7561label(13): 7562 read_last_list ref(5) 7563 read_list ref(6) 7564 read_integer 3 7565 read_last_list ref(7) 7566 read_integer 4 7567 read_nil 7568 mode t(0) 7569label(14): 7570 read_last_list ref(8) 7571 read_atom b 7572 read_last_list ref(9) 7573 read_list ref(10) 7574 read_integer 5 7575 read_variable a(1) 7576 mode t(0) 7577label(15): 7578 read_last_list ref(11) 7579 read_atom c 7580 read_nil 7581 space -3 7582 jmp q / 1 7583 7584------ Test head(23) ------- 7585p([a, [1, 2], [3, 4], b, [5|A]|c]) :- 7586 q(A). 7587 7588p / 1: 7589label(1): 7590 get_list a(1) ref(11) 7591 write_atom a 7592 write_list 7593label(2): 7594 write_first_list 7595label(3): 7596 write_integer 1 7597 write_list 7598label(4): 7599 write_integer 2 7600 write_nil 7601 mode t(0) ref(12) 7602 write_list 7603label(5): 7604 write_first_list 7605label(6): 7606 write_integer 3 7607 write_list 7608label(7): 7609 write_integer 4 7610 write_nil 7611 mode t(0) ref(13) 7612 write_list 7613label(8): 7614 write_atom b 7615 write_list 7616label(9): 7617 write_first_list 7618label(10): 7619 write_integer 5 7620 write_variable a(1) 7621 mode t(0) ref(14) 7622 write_atom c 7623 space -3 7624 jmp q / 1 7625label(11): 7626 read_atom a 7627 read_last_list ref(2) 7628 read_list ref(3) 7629 read_integer 1 7630 read_last_list ref(4) 7631 read_integer 2 7632 read_nil 7633 mode t(0) 7634label(12): 7635 read_last_list ref(5) 7636 read_list ref(6) 7637 read_integer 3 7638 read_last_list ref(7) 7639 read_integer 4 7640 read_nil 7641 mode t(0) 7642label(13): 7643 read_last_list ref(8) 7644 read_atom b 7645 read_last_list ref(9) 7646 read_list ref(10) 7647 read_integer 5 7648 read_variable a(1) 7649 mode t(0) 7650label(14): 7651 read_atom c 7652 space -3 7653 jmp q / 1 7654 7655------ Test head(24) ------- 7656p([a, [1, 2], [3, 4], b, [5|A]]) :- 7657 q(A). 7658 7659p / 1: 7660label(1): 7661 get_list a(1) ref(11) 7662 write_atom a 7663 write_list 7664label(2): 7665 write_first_list 7666label(3): 7667 write_integer 1 7668 write_list 7669label(4): 7670 write_integer 2 7671 write_nil 7672 mode t(0) ref(12) 7673 write_list 7674label(5): 7675 write_first_list 7676label(6): 7677 write_integer 3 7678 write_list 7679label(7): 7680 write_integer 4 7681 write_nil 7682 mode t(0) ref(13) 7683 write_list 7684label(8): 7685 write_atom b 7686 write_list 7687label(9): 7688 write_first_list 7689label(10): 7690 write_integer 5 7691 write_variable a(1) 7692 mode t(0) ref(14) 7693 write_nil 7694 space -3 7695 jmp q / 1 7696label(11): 7697 read_atom a 7698 read_last_list ref(2) 7699 read_list ref(3) 7700 read_integer 1 7701 read_last_list ref(4) 7702 read_integer 2 7703 read_nil 7704 mode t(0) 7705label(12): 7706 read_last_list ref(5) 7707 read_list ref(6) 7708 read_integer 3 7709 read_last_list ref(7) 7710 read_integer 4 7711 read_nil 7712 mode t(0) 7713label(13): 7714 read_last_list ref(8) 7715 read_atom b 7716 read_last_list ref(9) 7717 read_list ref(10) 7718 read_integer 5 7719 read_variable a(1) 7720 mode t(0) 7721label(14): 7722 read_nil 7723 space -3 7724 jmp q / 1 7725 7726------ Test head(30) ------- 7727p(f([1, 2], [3|A], c)) :- 7728 q(A). 7729 7730p / 1: 7731label(1): 7732 get_structure a(1) f / 3 ref(5) 7733 write_first_list 7734label(2): 7735 write_integer 1 7736 write_list 7737label(3): 7738 write_integer 2 7739 write_nil 7740 write_next_list t(0) ref(6) 7741label(4): 7742 write_integer 3 7743 write_variable a(1) 7744 mode t(0) ref(7) 7745 write_atom c 7746 space -1 7747 jmp q / 1 7748label(5): 7749 read_list ref(2) 7750 read_integer 1 7751 read_last_list ref(3) 7752 read_integer 2 7753 read_nil 7754label(6): 7755 read_next_list t(0) ref(4) 7756 read_integer 3 7757 read_variable a(1) 7758 mode t(0) 7759label(7): 7760 read_atom c 7761 space -1 7762 jmp q / 1 7763 7764------ Test head(31) ------- 7765p(f(a, [1, 2], b, [3|A], c)) :- 7766 q(A). 7767 7768p / 1: 7769label(1): 7770 get_structure a(1) f / 5 ref(5) 7771 write_atom a 7772 write_first_list 7773label(2): 7774 write_integer 1 7775 write_list 7776label(3): 7777 write_integer 2 7778 write_nil 7779 mode t(0) ref(6) 7780 write_atom b 7781 write_next_list t(0) 7782label(4): 7783 write_integer 3 7784 write_variable a(1) 7785 mode t(0) ref(7) 7786 write_atom c 7787 space -1 7788 jmp q / 1 7789label(5): 7790 read_atom a 7791 read_list ref(2) 7792 read_integer 1 7793 read_last_list ref(3) 7794 read_integer 2 7795 read_nil 7796 mode t(0) 7797label(6): 7798 read_atom b 7799 read_list t(0) ref(4) 7800 read_integer 3 7801 read_variable a(1) 7802 mode t(0) 7803label(7): 7804 read_atom c 7805 space -1 7806 jmp q / 1 7807 7808------ Test head(32) ------- 7809p(f(a, [1, 2], [3|A], c)) :- 7810 q(A). 7811 7812p / 1: 7813label(1): 7814 get_structure a(1) f / 4 ref(5) 7815 write_atom a 7816 write_first_list 7817label(2): 7818 write_integer 1 7819 write_list 7820label(3): 7821 write_integer 2 7822 write_nil 7823 write_next_list t(0) ref(6) 7824label(4): 7825 write_integer 3 7826 write_variable a(1) 7827 mode t(0) ref(7) 7828 write_atom c 7829 space -1 7830 jmp q / 1 7831label(5): 7832 read_atom a 7833 read_list ref(2) 7834 read_integer 1 7835 read_last_list ref(3) 7836 read_integer 2 7837 read_nil 7838label(6): 7839 read_next_list t(0) ref(4) 7840 read_integer 3 7841 read_variable a(1) 7842 mode t(0) 7843label(7): 7844 read_atom c 7845 space -1 7846 jmp q / 1 7847 7848------ Test head(33) ------- 7849p(f(a, [1, 2], b, [3|A])) :- 7850 q(A). 7851 7852p / 1: 7853label(1): 7854 get_structure a(1) f / 4 ref(5) 7855 write_atom a 7856 write_first_list 7857label(2): 7858 write_integer 1 7859 write_list 7860label(3): 7861 write_integer 2 7862 write_nil 7863 mode t(0) ref(6) 7864 write_atom b 7865 write_list 7866label(4): 7867 write_integer 3 7868 write_variable a(1) 7869 space -1 7870 jmp q / 1 7871label(5): 7872 read_atom a 7873 read_list ref(2) 7874 read_integer 1 7875 read_last_list ref(3) 7876 read_integer 2 7877 read_nil 7878 mode t(0) 7879label(6): 7880 read_atom b 7881 read_last_list ref(4) 7882 read_integer 3 7883 read_variable a(1) 7884 space -1 7885 jmp q / 1 7886 7887------ Test head(34) ------- 7888p(f("hello", 3.5, 5_3)) :- 7889 q. 7890 7891p / 1: 7892label(1): 7893 get_structure a(1) f / 3 ref(2) 7894 write_string "hello" 7895 write_constant 3.5 7896 write_constant 5_3 7897 jmp q / 0 7898label(2): 7899 read_string "hello" 7900 read_constant 3.5 7901 read_constant 5_3 7902 jmp q / 0 7903 7904------ Test head(40) ------- 7905p([A, B, C, D, E]). 7906 7907p / 1: 7908label(1): 7909 get_list a(1) ref(6) 7910 write_void 7911 write_list 7912label(2): 7913 write_void 7914 write_list 7915label(3): 7916 write_void 7917 write_list 7918label(4): 7919 write_void 7920 write_list 7921label(5): 7922 write_void 7923 write_nil 7924 ret 7925label(6): 7926 read_void 7927 read_last_list ref(2) 7928 read_void 7929 read_last_list ref(3) 7930 read_void 7931 read_last_list ref(4) 7932 read_void 7933 read_last_list ref(5) 7934 read_void 7935 read_nil 7936 ret 7937 7938------ Test head(41) ------- 7939p(f(A, B, C, D, E)). 7940 7941p / 1: 7942label(1): 7943 get_structure a(1) f / 5 ref(2) 7944 write_void 5 7945label(2): 7946 ret 7947 7948------ Test head(42) ------- 7949p(f(A, s(B, C), D, E)). 7950 7951p / 1: 7952label(1): 7953 get_structure a(1) f / 4 ref(3) 7954 write_void 7955 write_first_structure s / 2 7956label(2): 7957 write_void 2 7958 mode t(0) ref(4) 7959 write_void 2 7960 space -1 7961 ret 7962label(3): 7963 read_void 7964 read_structure s / 2 ref(2) 7965 mode t(0) 7966 space -1 7967 ret 7968label(4): 7969 space -1 7970 ret 7971 7972------ Test match(1) ------- 7973p(1, 2.3, 3_4, a, "s", []) ?- 7974 true. 7975 7976p / 6: 7977label(1): 7978 in_get_integer a(1) 1 7979 in_get_constant a(2) 2.3 7980 in_get_constant a(3) 3_4 7981 in_get_atom a(4) a 7982 in_get_string a(5) "s" 7983 in_get_nil a(6) 7984 ret 7985 7986------ Test match(2) ------- 7987p(A, B, C, D, D) ?- 7988 q(A), 7989 r(B). 7990 7991p / 5: 7992label(1): 7993 get_matched_value a(5) a(4) 7994 get_variable 1 a(2) y(1) 7995 callf q / 1 Y[1] 7996 move_chain y(1) a(1) r / 1 7997 7998------ Test match(3) ------- 7999p(A, A, B, B) ?- 8000 q(A), 8001 r(B). 8002 8003p / 4: 8004label(1): 8005 get_matched_value a(2) a(1) 8006 get_matched_value a(4) a(3) 8007 get_variable 1 a(3) y(1) 8008 callf q / 1 Y[1] 8009 move_chain y(1) a(1) r / 1 8010 8011------ Test match(4) ------- 8012p(foo(bar(1), A, baz(2))) ?- 8013 true. 8014 8015p / 1: 8016label(1): 8017 in_get_structure a(1) foo / 3 ref(2) 8018label(2): 8019 read_structure bar / 1 ref(fail) 8020 read_test_var 8021 read_integer 1 8022 mode t(0) 8023label(3): 8024 read_void 8025 read_last_structure baz / 1 ref(fail) 8026 read_test_var 8027 read_integer 2 8028 space -1 8029 ret 8030 8031------ Test match(5) ------- 8032p([1, 2, [3, 4]]) ?- 8033 true. 8034 8035p / 1: 8036label(1): 8037 in_get_list a(1) ref(2) 8038label(2): 8039 read_test_var 8040 read_integer 1 8041 read_last_list ref(fail) 8042 read_test_var 8043 read_integer 2 8044 read_last_list ref(fail) 8045 read_list ref(fail) 8046 read_test_var 8047 read_integer 3 8048 read_last_list ref(fail) 8049 read_test_var 8050 read_integer 4 8051 read_test_var 8052 read_nil 8053 mode t(0) 8054label(3): 8055 read_test_var 8056 read_nil 8057 space -1 8058 ret 8059 8060------ Test match(6) ------- 8061p(foo(A, A)) ?- 8062 true. 8063 8064p / 1: 8065label(1): 8066 in_get_structure a(1) foo / 2 ref(2) 8067label(2): 8068 read_variable a(1) 8069 read_matched_value a(1) 8070 ret 8071 8072------ Test match(7) ------- 8073p(foo(A, A, B, B)) ?- 8074 q(A), 8075 r(B). 8076 8077p / 1: 8078label(1): 8079 allocate 1 8080 in_get_structure a(1) foo / 4 ref(2) 8081label(2): 8082 read_variable a(1) 8083 read_matched_value a(1) 8084 read_variable y(1) 8085 read_matched_value y(1) 8086 callf q / 1 Y[1] 8087 move_chain y(1) a(1) r / 1 8088 8089------ Test match(8) ------- 8090p(A, foo(A, B), B) ?- 8091 true. 8092 8093p / 3: 8094label(1): 8095 in_get_structure a(2) foo / 2 ref(2) 8096label(2): 8097 read_matched_value a(1) 8098 read_matched_value a(3) 8099 ret 8100 8101------ Test match(9) ------- 8102p(A, foo(A, B), B) ?- 8103 p(A), 8104 r(B). 8105 8106p / 3: 8107label(1): 8108 in_get_structure a(2) foo / 2 ref(2) 8109label(2): 8110 read_matched_value a(1) 8111 read_matched_value a(3) 8112 get_variable 1 a(3) y(1) 8113 callf p / 1 Y[1] 8114 move_chain y(1) a(1) r / 1 8115 8116------ Test match(10) ------- 8117p(A) ?- 8118 p(A, B). 8119 8120p / 1: 8121label(1): 8122 in_get_meta a(1) ref(fail) 8123 read_void 8124 read_attribute suspend 8125 read_variable a(2) 8126 jmp p / 2 8127 8128------ Test match(11) ------- 8129p(A) ?- 8130 p(a, A, B). 8131 8132p / 1: 8133label(1): 8134 in_get_meta a(1) ref(fail) 8135 read_void 8136 read_attribute suspend 8137 read_variable a(3) 8138 move a(1) a(2) 8139 put_atom a(1) a 8140 jmp p / 3 8141 8142------ Test match(12) ------- 8143p(A, A) ?- 8144 p(a, b, A, B). 8145 8146p / 2: 8147label(1): 8148 in_get_meta a(1) ref(fail) 8149 read_void 8150 read_attribute suspend 8151 read_variable a(4) 8152 get_matched_value a(2) a(1) 8153 move a(1) a(3) 8154 put_atom a(1) a 8155 put_atom a(2) b 8156 jmp p / 4 8157 8158------ Test match(13) ------- 8159p(A) ?- 8160 q, 8161 p(A, B). 8162 8163p / 1: 8164label(1): 8165 allocate 2 8166 in_get_meta a(1) ref(fail) 8167 read_void 8168 read_attribute suspend 8169 read_variable y(2) 8170 move a(1) y(1) 8171 callf q / 0 Y[1,2] 8172 move 2 y(1) a(1) 8173 chain p / 2 8174 8175------ Test match(14) ------- 8176p(A, A) ?- 8177 q, 8178 p(A, B). 8179 8180p / 2: 8181label(1): 8182 allocate 2 8183 in_get_meta a(1) ref(fail) 8184 read_void 8185 read_attribute suspend 8186 read_variable y(2) 8187 get_matched_value a(2) a(1) 8188 move a(1) y(1) 8189 callf q / 0 Y[1,2] 8190 move 2 y(1) a(1) 8191 chain ref(1) 8192 8193------ Test match(20) ------- 8194p(f(A)) ?- 8195 p(A, B). 8196 8197p / 1: 8198label(1): 8199 in_get_structure a(1) f / 1 ref(2) 8200label(2): 8201 match_last_meta 8202 read_variable a(1) 8203 read_attribute suspend 8204 read_variable a(2) 8205 jmp p / 2 8206 8207------ Test match(21) ------- 8208p(f(a, A)) ?- 8209 p(A, B). 8210 8211p / 1: 8212label(1): 8213 in_get_structure a(1) f / 2 ref(2) 8214label(2): 8215 read_test_var 8216 read_atom a 8217 match_last_meta 8218 read_variable a(1) 8219 read_attribute suspend 8220 read_variable a(2) 8221 jmp p / 2 8222 8223------ Test match(22) ------- 8224p(f(a, A, c)) ?- 8225 p(A, B). 8226 8227p / 1: 8228label(1): 8229 in_get_structure a(1) f / 3 ref(2) 8230label(2): 8231 read_test_var 8232 read_atom a 8233 match_meta 8234 read_variable a(1) 8235 read_attribute suspend 8236 read_variable a(2) 8237 mode t(0) 8238label(3): 8239 read_test_var 8240 read_atom c 8241 space -1 8242 jmp p / 2 8243 8244------ Test match(23) ------- 8245p(f(bar(baz), A, c)) ?- 8246 p(A, B). 8247 8248p / 1: 8249label(1): 8250 in_get_structure a(1) f / 3 ref(2) 8251label(2): 8252 read_structure bar / 1 ref(fail) 8253 read_test_var 8254 read_atom baz 8255 match_next_meta t(0) 8256 read_variable a(1) 8257 read_attribute suspend 8258 read_variable a(2) 8259 mode t(0) 8260label(3): 8261 read_test_var 8262 read_atom c 8263 space -1 8264 jmp p / 2 8265 8266------ Test match(24) ------- 8267p(f(A, A)) ?- 8268 p(A, B). 8269 8270p / 1: 8271label(1): 8272 in_get_structure a(1) f / 2 ref(2) 8273label(2): 8274 match_meta 8275 read_variable a(1) 8276 read_attribute suspend 8277 read_variable a(2) 8278 mode t(0) 8279label(3): 8280 match_last_meta 8281 read_matched_value a(1) 8282 read_attribute suspend 8283 read_matched_value a(2) 8284 space -1 8285 jmp p / 2 8286 8287------ Test match(25) ------- 8288p(f(bar(baz), a, A, c)) ?- 8289 p(A, B). 8290 8291p / 1: 8292label(1): 8293 in_get_structure a(1) f / 4 ref(2) 8294label(2): 8295 read_structure bar / 1 ref(fail) 8296 read_test_var 8297 read_atom baz 8298 mode t(0) 8299label(3): 8300 read_test_var 8301 read_atom a 8302 match_meta t(0) 8303 read_variable a(1) 8304 read_attribute suspend 8305 read_variable a(2) 8306 mode t(0) 8307label(4): 8308 read_test_var 8309 read_atom c 8310 space -1 8311 jmp p / 2 8312 8313------ Test match(26) ------- 8314p(f(A, bar(baz), c)) ?- 8315 p(A, B). 8316 8317p / 1: 8318label(1): 8319 in_get_structure a(1) f / 3 ref(2) 8320label(2): 8321 match_meta 8322 read_variable a(1) 8323 read_attribute suspend 8324 read_variable a(2) 8325label(3): 8326 read_next_structure bar / 1 t(0) ref(fail) 8327 read_test_var 8328 read_atom baz 8329 mode t(0) 8330label(4): 8331 read_test_var 8332 read_atom c 8333 space -1 8334 jmp p / 2 8335 8336------ Test match(30) ------- 8337p(A) ?- 8338 p(A, B). 8339p(A) :- 8340 integer(A), 8341 q(A). 8342 8343INDEXES for (semidet) disjunction [2] 83441. Quality 1.0 8345 [] - [] 8346 [var] - [] 8347 [var, meta] - [1] 8348 [integer] - [2] 8349 [bignum] - [2] 8350Branch determinisms for disjunction [2] 8351 Branch 1: det 8352 Branch 2: det 8353p / 1: 8354label(1): 8355 switch_on_type a(1) 8356 meta: ref(7) 8357 []: ref(fail) 8358 atom: ref(fail) 8359 bignum: ref(8) 8360 breal: ref(fail) 8361 double: ref(fail) 8362 goal: ref(fail) 8363 handle: ref(fail) 8364 integer: ref(8) 8365 list: ref(fail) 8366 rational: ref(fail) 8367 string: ref(fail) 8368 structure: ref(fail) 8369 8370 branch ref(fail) 8371label(3): 8372 in_get_meta a(1) ref(fail) 8373label(7): 8374 read_void 8375 read_attribute suspend 8376 read_variable a(2) 8377 jmp p / 2 8378label(5): 8379 bi_integer a(1) 8380label(8): 8381 jmp q / 1 8382 8383------ Test match(31) ------- 8384p(A) ?- 8385 !, 8386 p(A, B). 8387p(A) :- 8388 q(A). 8389 8390INDEXES for (nondet) disjunction [2] 83911. Quality 1.5 8392 [] - [2] 8393 [var] - [2] 8394 [var, meta] - [1, 2] 8395Branch determinisms for disjunction [2] 8396 Branch 1: try 8397 Branch 2: trust 8398p / 1: 8399label(1): 8400 savecut a(2) 8401 switch_on_type a(1) 8402 meta: ref(2) 8403 []: ref(5) 8404 atom: ref(5) 8405 bignum: ref(5) 8406 breal: ref(5) 8407 double: ref(5) 8408 goal: ref(5) 8409 handle: ref(5) 8410 integer: ref(5) 8411 list: ref(5) 8412 rational: ref(5) 8413 string: ref(5) 8414 structure: ref(5) 8415 8416 branch ref(5) 8417label(2): 8418 try_me_else 0 2 ref(4) 8419label(3): 8420 in_get_meta a(1) ref(fail) 8421 read_void 8422 read_attribute suspend 8423 move a(2) a(3) 8424 read_variable a(2) 8425 cut a(3) 8426 jmp p / 2 8427label(4): 8428 trust_me 0 8429label(5): 8430 jmp q / 1 8431 8432------ Test match(32) ------- 8433p(A) ?- 8434 p(A, B). 8435p(A) :- 8436 free(A), 8437 q(A). 8438 8439INDEXES for (semidet) disjunction [2] 84401. Quality 1.0 8441 [] - [] 8442 [var] - [] 8443 [var, free] - [2] 8444 [var, meta] - [1] 8445Branch determinisms for disjunction [2] 8446 Branch 1: det 8447 Branch 2: det 8448p / 1: 8449label(1): 8450 switch_on_type a(1) 8451 meta: ref(8) 8452 []: ref(fail) 8453 atom: ref(fail) 8454 bignum: ref(fail) 8455 breal: ref(fail) 8456 double: ref(fail) 8457 goal: ref(fail) 8458 handle: ref(fail) 8459 integer: ref(fail) 8460 list: ref(fail) 8461 rational: ref(fail) 8462 string: ref(fail) 8463 structure: ref(fail) 8464 8465 branch ref(7) 8466label(5): 8467 bi_free a(1) 8468label(7): 8469 jmp q / 1 8470label(3): 8471 in_get_meta a(1) ref(fail) 8472label(8): 8473 read_void 8474 read_attribute suspend 8475 read_variable a(2) 8476 jmp p / 2 8477 8478------ Test match(33) ------- 8479p(A) ?- 8480 p(A, B). 8481p(A) :- 8482 meta(A), 8483 q(A). 8484 8485INDEXES for (nondet) disjunction [2] 84861. Quality 2.0 8487 [] - [] 8488 [var] - [] 8489 [var, meta] - [1, 2] 8490Branch determinisms for disjunction [2] 8491 Branch 1: try 8492 Branch 2: trust 8493p / 1: 8494label(1): 8495 try_me_else 0 1 ref(3) 8496label(2): 8497 in_get_meta a(1) ref(fail) 8498 read_void 8499 read_attribute suspend 8500 read_variable a(2) 8501 jmp p / 2 8502label(3): 8503 trust_me 0 8504label(4): 8505 bi_meta a(1) 8506 jmp q / 1 8507 8508------ Test match(34) ------- 8509p(A) :- 8510 free(A), 8511 q(A). 8512p(A) ?- 8513 p(A, B). 8514 8515INDEXES for (semidet) disjunction [2] 85161. Quality 1.0 8517 [] - [] 8518 [var] - [] 8519 [var, free] - [1] 8520 [var, meta] - [2] 8521Branch determinisms for disjunction [2] 8522 Branch 1: det 8523 Branch 2: det 8524p / 1: 8525label(1): 8526 switch_on_type a(1) 8527 meta: ref(8) 8528 []: ref(fail) 8529 atom: ref(fail) 8530 bignum: ref(fail) 8531 breal: ref(fail) 8532 double: ref(fail) 8533 goal: ref(fail) 8534 handle: ref(fail) 8535 integer: ref(fail) 8536 list: ref(fail) 8537 rational: ref(fail) 8538 string: ref(fail) 8539 structure: ref(fail) 8540 8541 branch ref(7) 8542label(3): 8543 bi_free a(1) 8544label(7): 8545 jmp q / 1 8546label(5): 8547 in_get_meta a(1) ref(fail) 8548label(8): 8549 read_void 8550 read_attribute suspend 8551 read_variable a(2) 8552 jmp p / 2 8553 8554------ Test match(40) ------- 8555p([A, B, C, D, E]) ?- 8556 true. 8557 8558p / 1: 8559label(1): 8560 in_get_list a(1) ref(2) 8561label(2): 8562 read_void 8563 read_last_list ref(fail) 8564 read_void 8565 read_last_list ref(fail) 8566 read_void 8567 read_last_list ref(fail) 8568 read_void 8569 read_last_list ref(fail) 8570 read_void 8571 read_test_var 8572 read_nil 8573 ret 8574 8575------ Test match(41) ------- 8576p(f(A, B, C, D, E)) ?- 8577 true. 8578 8579p / 1: 8580label(1): 8581 in_get_structure a(1) f / 5 ref(2) 8582label(2): 8583 ret 8584 8585------ Test match(42) ------- 8586p(f(A, s(B, C), D, E)) ?- 8587 true. 8588 8589p / 1: 8590label(1): 8591 in_get_structure a(1) f / 4 ref(2) 8592label(2): 8593 read_void 8594 read_structure s / 2 ref(fail) 8595 mode t(0) 8596 space -1 8597 ret 8598 8599------ Test unify(1) ------- 8600p(A, B, C) :- 8601 q, 8602 A = f(1, g(B, D), E, h(C, B)), 8603 r(C, D), 8604 s(E). 8605 8606p / 3: 8607label(1): 8608 get_variable 4 a(1) y(2) 8609 move 2 a(2) y(3) 8610 callf q / 0 Y[2,3,4] 8611 move y(2) a(3) 8612 get_structure a(3) f / 4 ref(4) 8613 write_integer 1 8614 write_first_structure g / 2 8615label(2): 8616 write_value y(3) 8617 write_variable a(2) 8618 mode t(0) ref(5) 8619 write_variable y(1) 8620 write_structure h / 2 8621label(3): 8622 write_value y(4) 8623 write_value y(3) 8624 branch ref(6) 8625label(4): 8626 read_integer 1 8627 read_structure g / 2 ref(2) 8628 read_value y(3) 8629 read_variable a(2) 8630 mode t(0) 8631label(5): 8632 read_variable y(1) 8633 read_last_structure h / 2 ref(3) 8634 read_value y(4) 8635 read_value y(3) 8636label(6): 8637 space -1 8638 move_callf y(4) a(1) r / 2 Y[1] 8639 move_chain y(1) a(1) s / 1 8640 8641------ Test dis(1) ------- 8642p :- 8643 ( 8644 a 8645 ; 8646 ( 8647 b 8648 ; 8649 ( 8650 c 8651 ; 8652 d 8653 ) 8654 ) 8655 ). 8656 8657p / 0: 8658label(1): 8659 try_me_else 0 0 ref(3) 8660label(2): 8661 jmp a / 0 8662label(3): 8663 retry_me_else 0 ref(5) 8664label(4): 8665 jmp b / 0 8666label(5): 8667 retry_me_else 0 ref(7) 8668label(6): 8669 jmp c / 0 8670label(7): 8671 trust_me 0 8672label(8): 8673 jmp d / 0 8674 8675------ Test dis(2) ------- 8676p :- 8677 ( 8678 ( 8679 ( 8680 a 8681 ; 8682 b 8683 ) 8684 ; 8685 c 8686 ) 8687 ; 8688 d 8689 ). 8690 8691p / 0: 8692label(1): 8693 try_me_else 0 0 ref(3) 8694label(2): 8695 jmp a / 0 8696label(3): 8697 retry_me_else 0 ref(5) 8698label(4): 8699 jmp b / 0 8700label(5): 8701 retry_me_else 0 ref(7) 8702label(6): 8703 jmp c / 0 8704label(7): 8705 trust_me 0 8706label(8): 8707 jmp d / 0 8708 8709------ Test dis(3) ------- 8710p :- 8711 ( 8712 a 8713 ; 8714 ( 8715 ( 8716 b 8717 ; 8718 c 8719 ) 8720 ; 8721 d 8722 ) 8723 ). 8724 8725p / 0: 8726label(1): 8727 try_me_else 0 0 ref(3) 8728label(2): 8729 jmp a / 0 8730label(3): 8731 retry_me_else 0 ref(5) 8732label(4): 8733 jmp b / 0 8734label(5): 8735 retry_me_else 0 ref(7) 8736label(6): 8737 jmp c / 0 8738label(7): 8739 trust_me 0 8740label(8): 8741 jmp d / 0 8742 8743------ Test dis(4) ------- 8744p :- 8745 ( 8746 a 8747 -> 8748 aa 8749 ; 8750 b 8751 ). 8752 8753p / 0: 8754label(1): 8755 allocate 1 8756 savecut y(1) 8757 try_me_else 0 0 ref(3) 8758label(2): 8759 callf a / 0 Y[1] 8760 cut y(1) 0 8761 chain aa / 0 8762label(3): 8763 trust_me_inline 0 Y[] 8764label(4): 8765 chain b / 0 8766 8767------ Test dis(5) ------- 8768p :- 8769 q, 8770 ( 8771 a 8772 -> 8773 aa 8774 ; 8775 b 8776 ). 8777 8778p / 0: 8779label(1): 8780 allocate 1 8781 callf q / 0 Y[] 8782 savecut y(1) 8783 try_me_else 0 0 ref(3) 8784label(2): 8785 callf a / 0 Y[1] 8786 cut y(1) 0 8787 chain aa / 0 8788label(3): 8789 trust_me_inline 0 Y[] 8790label(4): 8791 chain b / 0 8792 8793------ Test dis(6) ------- 8794p :- 8795 ( 8796 a 8797 -> 8798 aa 8799 ; 8800 ( 8801 b 8802 -> 8803 bb 8804 ; 8805 ( 8806 c 8807 -> 8808 cc 8809 ; 8810 d 8811 ) 8812 ) 8813 ). 8814 8815p / 0: 8816label(1): 8817 allocate 1 8818 savecut y(1) 8819 try_me_else 0 0 ref(3) 8820label(2): 8821 callf a / 0 Y[1] 8822 cut y(1) 0 8823 chain aa / 0 8824label(3): 8825 retry_me_inline 0 ref(5) Y[1] 8826label(4): 8827 callf b / 0 Y[1] 8828 cut y(1) 0 8829 chain bb / 0 8830label(5): 8831 retry_me_inline 0 ref(7) Y[1] 8832label(6): 8833 callf c / 0 Y[1] 8834 cut y(1) 0 8835 chain cc / 0 8836label(7): 8837 trust_me_inline 0 Y[] 8838label(8): 8839 chain d / 0 8840 8841------ Test dis(7) ------- 8842p :- 8843 ( 8844 a 8845 -> 8846 aa 8847 ; 8848 ( 8849 b 8850 -> 8851 bb 8852 ; 8853 ( 8854 c 8855 -> 8856 cc 8857 ; 8858 ( 8859 d 8860 -> 8861 dd 8862 ) 8863 ) 8864 ) 8865 ). 8866 8867p / 0: 8868label(1): 8869 allocate 2 8870 savecut y(1) 8871 try_me_else 0 0 ref(3) 8872label(2): 8873 callf a / 0 Y[1] 8874 cut y(1) 0 8875 chain aa / 0 8876label(3): 8877 retry_me_inline 0 ref(5) Y[1] 8878label(4): 8879 callf b / 0 Y[1] 8880 cut y(1) 0 8881 chain bb / 0 8882label(5): 8883 retry_me_inline 0 ref(7) Y[1] 8884label(6): 8885 callf c / 0 Y[1] 8886 cut y(1) 0 8887 chain cc / 0 8888label(7): 8889 trust_me_inline 0 Y[] 8890label(8): 8891 savecut y(2) 8892 callf d / 0 Y[2] 8893 cut y(2) 0 8894 chain dd / 0 8895 8896------ Test dis(8) ------- 8897p :- 8898 ( 8899 a 8900 ; 8901 ( 8902 b 8903 -> 8904 bb 8905 ; 8906 ( 8907 c 8908 -> 8909 cc 8910 ; 8911 d 8912 ) 8913 ) 8914 ). 8915 8916p / 0: 8917label(1): 8918 allocate 1 8919 savecut y(1) 8920 try_me_else 0 0 ref(3) 8921label(2): 8922 chain a / 0 8923label(3): 8924 retry_me_inline 0 ref(5) Y[1] 8925label(4): 8926 callf b / 0 Y[1] 8927 cut y(1) 0 8928 chain bb / 0 8929label(5): 8930 retry_me_inline 0 ref(7) Y[1] 8931label(6): 8932 callf c / 0 Y[1] 8933 cut y(1) 0 8934 chain cc / 0 8935label(7): 8936 trust_me_inline 0 Y[] 8937label(8): 8938 chain d / 0 8939 8940------ Test dis(9) ------- 8941p :- 8942 ( 8943 a 8944 -> 8945 aa 8946 ; 8947 ( 8948 b 8949 ; 8950 ( 8951 c 8952 -> 8953 cc 8954 ; 8955 d 8956 ) 8957 ) 8958 ). 8959 8960p / 0: 8961label(1): 8962 allocate 1 8963 savecut y(1) 8964 try_me_else 0 0 ref(3) 8965label(2): 8966 callf a / 0 Y[1] 8967 cut y(1) 0 8968 chain aa / 0 8969label(3): 8970 retry_me_inline 0 ref(5) Y[1] 8971label(4): 8972 chain b / 0 8973label(5): 8974 retry_me_inline 0 ref(7) Y[1] 8975label(6): 8976 callf c / 0 Y[1] 8977 cut y(1) 0 8978 chain cc / 0 8979label(7): 8980 trust_me_inline 0 Y[] 8981label(8): 8982 chain d / 0 8983 8984------ Test dis(10) ------- 8985p :- 8986 ( 8987 a 8988 -> 8989 aa 8990 ; 8991 ( 8992 b 8993 -> 8994 bb 8995 ; 8996 ( 8997 c 8998 ; 8999 d 9000 ) 9001 ) 9002 ). 9003 9004p / 0: 9005label(1): 9006 allocate 1 9007 savecut y(1) 9008 try_me_else 0 0 ref(3) 9009label(2): 9010 callf a / 0 Y[1] 9011 cut y(1) 0 9012 chain aa / 0 9013label(3): 9014 retry_me_inline 0 ref(5) Y[1] 9015label(4): 9016 callf b / 0 Y[1] 9017 cut y(1) 0 9018 chain bb / 0 9019label(5): 9020 retry_me_inline 0 ref(7) Y[] 9021label(6): 9022 chain c / 0 9023label(7): 9024 trust_me_inline 0 Y[] 9025label(8): 9026 chain d / 0 9027 9028------ Test dis(11) ------- 9029p :- 9030 ( 9031 a 9032 -> 9033 aa 9034 ; 9035 ( 9036 ( 9037 b 9038 -> 9039 bb 9040 ; 9041 c 9042 ) 9043 ; 9044 d 9045 ) 9046 ). 9047 9048p / 0: 9049label(1): 9050 allocate 2 9051 savecut y(1) 9052 try_me_else 0 0 ref(3) 9053label(2): 9054 callf a / 0 Y[1] 9055 cut y(1) 0 9056 chain aa / 0 9057label(3): 9058 retry_me_inline 0 ref(8) Y[] 9059label(4): 9060 savecut y(2) 9061 try_me_else 0 0 ref(6) 9062label(5): 9063 callf b / 0 Y[2] 9064 cut y(2) 0 9065 chain bb / 0 9066label(6): 9067 trust_me_inline 0 Y[] 9068label(7): 9069 chain c / 0 9070label(8): 9071 trust_me_inline 0 Y[] 9072label(9): 9073 chain d / 0 9074 9075------ Test dis(12) ------- 9076p :- 9077 ( 9078 \+ a 9079 -> 9080 b 9081 ; 9082 c 9083 ). 9084 9085p / 0: 9086label(1): 9087 allocate 2 9088 savecut y(1) 9089 try_me_else 0 0 ref(6) 9090label(2): 9091 savecut y(2) 9092 try_me_else 0 0 ref(4) 9093label(3): 9094 callf a / 0 Y[1,2] 9095 cut y(2) 1 9096 failure 9097label(4): 9098 trust_me_inline 0 Y[1] 9099label(5): 9100 cut y(1) 0 9101 chain b / 0 9102label(6): 9103 trust_me_inline 0 Y[] 9104label(7): 9105 chain c / 0 9106 9107------ Test clause(1) ------- 9108p :- 9109 a. 9110p :- 9111 b. 9112 9113p / 0: 9114label(1): 9115 try_me_else 0 0 ref(3) 9116label(2): 9117 jmp a / 0 9118label(3): 9119 trust_me 0 9120label(4): 9121 jmp b / 0 9122 9123------ Test clause(2) ------- 9124p :- 9125 a. 9126p :- 9127 b. 9128p :- 9129 c, 9130 d. 9131 9132p / 0: 9133label(1): 9134 try_me_else 0 0 ref(3) 9135label(2): 9136 jmp a / 0 9137label(3): 9138 retry_me_else 0 ref(5) 9139label(4): 9140 jmp b / 0 9141label(5): 9142 trust_me 0 9143label(6): 9144 allocate 0 9145 callf c / 0 Y[] 9146 chain d / 0 9147 9148------ Test clause(3) ------- 9149p :- 9150 ( 9151 a 9152 -> 9153 aa 9154 ). 9155p :- 9156 b. 9157 9158p / 0: 9159label(1): 9160 try_me_else 0 0 ref(3) 9161label(2): 9162 allocate 1 9163 savecut y(1) 9164 callf a / 0 Y[1] 9165 cut y(1) 0 9166 chain aa / 0 9167label(3): 9168 trust_me 0 9169label(4): 9170 jmp b / 0 9171 9172------ Test special(1) ------- 9173p(A) :- 9174 A. 9175 9176p / 1: 9177label(1): 9178 put_module a(2) eclipse 9179 jmp sepia_kernel : call_ / 2 9180 9181------ Test special(2) ------- 9182p(A) :- 9183 call(A). 9184 9185p / 1: 9186label(1): 9187 put_module a(2) eclipse 9188 jmp sepia_kernel : call_ / 2 9189 9190------ Test special(3) ------- 9191p(A, B) :- 9192 A @ B. 9193 9194p / 2: 9195label(1): 9196 jmp sepia_kernel : call_ / 2 9197 9198------ Test special(4) ------- 9199p(A) :- 9200 A @ lists. 9201 9202p / 1: 9203label(1): 9204 put_atom a(2) lists 9205 jmp sepia_kernel : call_ / 2 9206 9207------ Test special(5) ------- 9208p(A, B) :- 9209 B : A. 9210 9211p / 2: 9212label(1): 9213 put_module a(3) eclipse 9214 swap a(1) a(2) 9215 jmp sepia_kernel : '[]:@' / 3 9216 9217------ Test special(6) ------- 9218p(A) :- 9219 lists : A. 9220 9221p / 1: 9222label(1): 9223 move a(1) a(2) 9224 put_atom a(1) lists 9225 put_module a(3) eclipse 9226 jmp sepia_kernel : '[]:@' / 3 9227 9228------ Test special(7) ------- 9229p :- 9230 3 = 3. 9231 9232p / 0: 9233label(1): 9234 ret 9235 9236------ Test special(8) ------- 9237p :- 9238 3 = 4. 9239 9240p / 0: 9241label(1): 9242 failure 9243 9244------ Test special(9) ------- 9245p :- 9246 call(q). 9247 9248p / 0: 9249label(1): 9250 put_atom a(1) q 9251 put_module a(2) eclipse 9252 jmp sepia_kernel : call_ / 2 9253 9254------ Test special(10) ------- 9255p :- 9256 q, 9257 call((a, !, b)), 9258 r. 9259 9260p / 0: 9261label(1): 9262 allocate 0 9263 callf q / 0 Y[] 9264 put_structure a(1) (',') / 2 9265 write_atom a 9266 push_structure 3 9267 write_didatom (',') / 2 ! 9268 write_atom b 9269 put_module a(2) eclipse 9270 callf sepia_kernel : call_ / 2 Y[] 9271 chain r / 0 9272 9273------ Test special(11) ------- 9274p(A) :- 9275 call(q) @ A. 9276 9277p / 1: 9278label(1): 9279 move a(1) a(2) 9280 put_atom a(1) q 9281 jmp sepia_kernel : call_ / 2 9282 9283------ Test special(12) ------- 9284p :- 9285 call(q) @ lists. 9286 9287p / 0: 9288label(1): 9289 put_atom a(1) q 9290 put_atom a(2) lists 9291 jmp sepia_kernel : call_ / 2 9292 9293------ Test special(13) ------- 9294p :- 9295 call(writeln(hello)) @ lists. 9296 9297p / 0: 9298label(1): 9299 put_structure a(1) writeln / 1 9300 write_atom hello 9301 put_atom a(2) lists 9302 jmp sepia_kernel : call_ / 2 9303 9304------ Test special(13) ------- 9305p :- 9306 writeln(hello) @ lists. 9307 9308p / 0: 9309label(1): 9310 put_atom a(1) hello 9311 put_atom a(2) lists 9312 jmp sepia_kernel : writeln_body / 2 9313 9314------ Test special(14) ------- 9315p :- 9316 (writeln(hello), nl) @ lists. 9317 9318p / 0: 9319label(1): 9320 put_atom a(1) hello 9321 put_atom a(2) lists 9322 allocate 0 9323 callf sepia_kernel : writeln_body / 2 Y[] 9324 chain lists : nl / 0 9325 9326------ Test tool(1) ------- 9327p(A) :- 9328 get_flag(p / 0, definition_module, A). 9329 9330p / 1: 9331label(1): 9332 move a(1) a(3) 9333 put_structure a(1) (/) / 2 9334 write_atom p 9335 push_integer 0 9336 put_atom a(2) definition_module 9337 put_module a(4) eclipse 9338 jmp sepia_kernel : get_flag_body / 4 9339 9340------ Test tool(2) ------- 9341p(A) :- 9342 get_flag(p / 0, definition_module, A) @ lists. 9343 9344p / 1: 9345label(1): 9346 move a(1) a(3) 9347 put_structure a(1) (/) / 2 9348 write_atom p 9349 push_integer 0 9350 put_atom a(2) definition_module 9351 put_atom a(4) lists 9352 jmp sepia_kernel : get_flag_body / 4 9353 9354------ Test tool(3) ------- 9355p(A, B) :- 9356 get_flag(p / 0, definition_module, B) @ A. 9357 9358p / 2: 9359label(1): 9360 move a(1) a(4) 9361 put_structure a(1) (/) / 2 9362 write_atom p 9363 push_integer 0 9364 move a(2) a(3) 9365 put_atom a(2) definition_module 9366 jmp sepia_kernel : get_flag_body / 4 9367 9368------ Test tool(4) ------- 9369p :- 9370 q @ lists. 9371 9372p / 0: 9373label(1): 9374 jmp q / 0 9375 9376------ Test tool(5) ------- 9377p(A) :- 9378 q @ A. 9379 9380p / 1: 9381label(1): 9382 jmp q / 0 9383 9384------ Test cut(1) ------- 9385p :- 9386 !. 9387 9388p / 0: 9389label(1): 9390 ret 9391 9392------ Test cut(2) ------- 9393p :- 9394 q, 9395 !. 9396 9397p / 0: 9398label(1): 9399 allocate 1 9400 savecut y(1) 9401 callf q / 0 Y[1] 9402 cut y(1) 0 9403 exit 9404 9405------ Test cut(3) ------- 9406p :- 9407 q, 9408 !, 9409 r. 9410 9411p / 0: 9412label(1): 9413 allocate 1 9414 savecut y(1) 9415 callf q / 0 Y[1] 9416 cut y(1) 0 9417 chain r / 0 9418 9419------ Test cut(4) ------- 9420p :- 9421 q, 9422 !, 9423 r. 9424p :- 9425 s. 9426 9427p / 0: 9428label(1): 9429 allocate 1 9430 savecut y(1) 9431 try_me_else 0 0 ref(3) 9432label(2): 9433 callf q / 0 Y[1] 9434 cut y(1) 0 9435 chain r / 0 9436label(3): 9437 trust_me_inline 0 Y[] 9438label(4): 9439 chain s / 0 9440 9441------ Test cut(5) ------- 9442p :- 9443 a. 9444p :- 9445 !, 9446 bb. 9447p :- 9448 c, 9449 d. 9450 9451p / 0: 9452label(1): 9453 savecut a(1) 9454 try_me_else 0 1 ref(3) 9455label(2): 9456 jmp a / 0 9457label(3): 9458 retry_me_else 0 ref(5) 9459label(4): 9460 cut a(1) 9461 jmp bb / 0 9462label(5): 9463 trust_me 0 9464label(6): 9465 allocate 0 9466 callf c / 0 Y[] 9467 chain d / 0 9468 9469------ Test cut(6) ------- 9470p :- 9471 a. 9472p :- 9473 b, 9474 !, 9475 bb. 9476p :- 9477 c, 9478 d. 9479 9480p / 0: 9481label(1): 9482 allocate 1 9483 savecut y(1) 9484 try_me_else 0 0 ref(3) 9485label(2): 9486 chain a / 0 9487label(3): 9488 retry_me_inline 0 ref(5) Y[1] 9489label(4): 9490 callf b / 0 Y[1] 9491 cut y(1) 0 9492 chain bb / 0 9493label(5): 9494 trust_me_inline 0 Y[] 9495label(6): 9496 callf c / 0 Y[] 9497 chain d / 0 9498 9499------ Test cut_to(1) ------- 9500p(A) :- 9501 q, 9502 sepia_kernel : cut_to(A). 9503 9504p / 1: 9505label(1): 9506 get_variable 1 a(1) y(1) 9507 callf q / 0 Y[1] 9508 move y(1) a(1) 9509 cut a(1) 9510 exit 9511 9512------ Test cut_to(2) ------- 9513p(A) :- 9514 q, 9515 nonvar(A), 9516 sepia_kernel : cut_to(A). 9517 9518p / 1: 9519label(1): 9520 get_variable 1 a(1) y(1) 9521 callf q / 0 Y[1] 9522 move y(1) a(1) 9523 bi_nonvar a(1) 9524 cut a(1) 9525 exit 9526 9527------ Test cut_to(3) ------- 9528p(A) :- 9529 nonvar(A), 9530 sepia_kernel : cut_to(A). 9531 9532p / 1: 9533label(1): 9534 bi_nonvar a(1) 9535 cut a(1) 9536 ret 9537 9538------ Test cut_to(4) ------- 9539p(A) :- 9540 sepia_kernel : cut_to(A). 9541 9542p / 1: 9543label(1): 9544 cut a(1) 9545 ret 9546 9547------ Test env(1) ------- 9548p :- 9549 q(A, B, C, D, E, F, G), 9550 r(H, I, J, K, L, M, N), 9551 q(A, B, C, D, E, F, G), 9552 r(H, I, J, K, L, M, N). 9553 9554p / 0: 9555label(1): 9556 allocate 14 9557 put_global_variable2 a(1) y(8) a(2) y(9) 9558 put_global_variable2 a(3) y(10) a(4) y(11) 9559 put_global_variable2 a(5) y(12) a(6) y(13) 9560 put_global_variable_callf a(7) y(14) q / 7 Y[8,9,10,11,12,13,14] 9561 put_global_variable2 a(1) y(1) a(2) y(2) 9562 put_global_variable2 a(3) y(3) a(4) y(4) 9563 put_global_variable2 a(5) y(5) a(6) y(6) 9564 put_global_variable_callf a(7) y(7) r / 7 Y[1,2,3,4,5,6,7,8,9,10,11,12,13,14] 9565 move 7 y(8) a(1) 9566 callf q / 7 Y[1,2,3,4,5,6,7] 9567 move 7 y(1) a(1) 9568 chain r / 7 9569 9570------ Test env(2) ------- 9571p :- 9572 q(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T), 9573 r(U, V, W, X, Y, Z, A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, N1), 9574 s(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T), 9575 t(U, V, W, X, Y, Z, A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, N1). 9576 9577p / 0: 9578label(1): 9579 allocate 40 9580 put_global_variable2 a(1) y(21) a(2) y(22) 9581 put_global_variable2 a(3) y(23) a(4) y(24) 9582 put_global_variable2 a(5) y(25) a(6) y(26) 9583 put_global_variable2 a(7) y(27) a(8) y(28) 9584 put_global_variable2 a(9) y(29) a(10) y(30) 9585 put_global_variable2 a(11) y(31) a(12) y(32) 9586 put_global_variable2 a(13) y(33) a(14) y(34) 9587 put_global_variable2 a(15) y(35) a(16) y(36) 9588 put_global_variable2 a(17) y(37) a(18) y(38) 9589 put_global_variable2 a(19) y(39) a(20) y(40) 9590 callf q / 20 Y[21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40] 9591 put_global_variable2 a(1) y(1) a(2) y(2) 9592 put_global_variable2 a(3) y(3) a(4) y(4) 9593 put_global_variable2 a(5) y(5) a(6) y(6) 9594 put_global_variable2 a(7) y(7) a(8) y(8) 9595 put_global_variable2 a(9) y(9) a(10) y(10) 9596 put_global_variable2 a(11) y(11) a(12) y(12) 9597 put_global_variable2 a(13) y(13) a(14) y(14) 9598 put_global_variable2 a(15) y(15) a(16) y(16) 9599 put_global_variable2 a(17) y(17) a(18) y(18) 9600 put_global_variable2 a(19) y(19) a(20) y(20) 9601 callf r / 20 Y[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40] 9602 move 20 y(21) a(1) 9603 callf s / 20 Y[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 9604 move 20 y(1) a(1) 9605 chain t / 20 9606 9607------ Test env(3) ------- 9608p(A, B, C) :- 9609 a, 9610 b(A), 9611 c(B), 9612 d(C), 9613 e. 9614 9615p / 3: 9616label(1): 9617 get_variable 3 a(1) y(3) 9618 move a(2) y(2) a(3) y(1) 9619 callf a / 0 Y[1,2,3] 9620 move_callf y(3) a(1) b / 1 Y[1,2] 9621 move_callf y(2) a(1) c / 1 Y[1] 9622 move_callf y(1) a(1) d / 1 Y[] 9623 chain e / 0 9624 9625------ Test env(4) ------- 9626p(A, B, C) :- 9627 a, 9628 b(A), 9629 c(C), 9630 d(B), 9631 e. 9632 9633p / 3: 9634label(1): 9635 get_variable 3 a(1) y(3) 9636 move 2 a(2) y(1) 9637 callf a / 0 Y[1,2,3] 9638 move_callf y(3) a(1) b / 1 Y[1,2] 9639 move_callf y(2) a(1) c / 1 Y[1] 9640 move_callf y(1) a(1) d / 1 Y[] 9641 chain e / 0 9642 9643------ Test env(5) ------- 9644p(A, B, C, D) :- 9645 t, 9646 a(A), 9647 e. 9648p(A, B, C, D) :- 9649 t, 9650 b(B), 9651 e. 9652p(A, B, C, D) :- 9653 t, 9654 c(C), 9655 d(D), 9656 e. 9657p(A, B, C, D) :- 9658 t, 9659 a(A), 9660 e. 9661 9662p / 4: 9663label(1): 9664 get_variable 4 a(1) y(1) 9665 move 3 a(2) y(2) 9666 try_me_else 0 0 ref(3) 9667label(2): 9668 callf t / 0 Y[1] 9669 move_callf y(1) a(1) a / 1 Y[] 9670 chain e / 0 9671label(3): 9672 retry_me_inline 0 ref(5) Y[1,2,3,4] 9673label(4): 9674 callf t / 0 Y[2] 9675 move_callf y(2) a(1) b / 1 Y[] 9676 chain e / 0 9677label(5): 9678 retry_me_inline 0 ref(7) Y[1,3,4] 9679label(6): 9680 callf t / 0 Y[3,4] 9681 move_callf y(3) a(1) c / 1 Y[4] 9682 move_callf y(4) a(1) d / 1 Y[] 9683 chain e / 0 9684label(7): 9685 trust_me_inline 0 Y[1] 9686label(8): 9687 callf t / 0 Y[1] 9688 move_callf y(1) a(1) a / 1 Y[] 9689 chain e / 0 9690 9691------ Test env(6) ------- 9692p(a, A, B, C, D) :- 9693 t, 9694 a(A), 9695 e. 9696p(a, A, B, C, D) :- 9697 t, 9698 b(B), 9699 e. 9700p(b, A, B, C, D) :- 9701 t, 9702 c(C), 9703 d(D), 9704 e. 9705p(a, A, B, C, D) :- 9706 t, 9707 a(A), 9708 e. 9709 9710INDEXES for (nondet) disjunction [2] 97111. Quality 2.7 9712 [] - [] 9713 [atom] - [] 9714 [atom, a] - [1, 2, 4] 9715 [atom, b] - [3] 9716 [var] - [1, 2, 3, 4] 9717Branch determinisms for disjunction [2] 9718 Branch 1: try 9719 Branch 2: retry 9720 Branch 3: retry 9721 Branch 4: trust 9722p / 5: 9723label(1): 9724 get_variable 4 a(2) y(1) 9725 move 3 a(3) y(2) 9726 atom_switch a(1) 9727 a: ref(12) 9728 b: ref(13) 9729 default: ref(fail) 9730 9731label(3): 9732 try_me_else 0 1 ref(5) 9733label(4): 9734 get_atom a(1) a 9735 callf t / 0 Y[1] 9736 move_callf y(1) a(1) a / 1 Y[] 9737 chain e / 0 9738label(5): 9739 retry_me_inline 0 ref(7) Y[1,2,3,4] 9740label(6): 9741 get_atom a(1) a 9742 callf t / 0 Y[2] 9743 move_callf y(2) a(1) b / 1 Y[] 9744 chain e / 0 9745label(7): 9746 retry_me_inline 0 ref(9) Y[1,3,4] 9747label(8): 9748 get_atom a(1) b 9749label(13): 9750 callf t / 0 Y[3,4] 9751 move_callf y(3) a(1) c / 1 Y[4] 9752 move_callf y(4) a(1) d / 1 Y[] 9753 chain e / 0 9754label(9): 9755 trust_me_inline 0 Y[1] 9756label(10): 9757 get_atom a(1) a 9758 callf t / 0 Y[1] 9759 move_callf y(1) a(1) a / 1 Y[] 9760 chain e / 0 9761label(12): 9762 try 0 1 ref(4) 9763 retry_inline 0 ref(6) Y[1,2] 9764 trust_inline 0 ref(10) Y[1] 9765 9766------ Test env(7) ------- 9767p(a, A, B, C, D) :- 9768 t, 9769 a(A), 9770 e. 9771p(a, A, B, C, D) :- 9772 t, 9773 b(B), 9774 e. 9775p(a, A, B, C, D) :- 9776 t, 9777 c(C), 9778 d(D), 9779 e. 9780p(b, A, B, C, D) :- 9781 t, 9782 a(A), 9783 e. 9784 9785INDEXES for (nondet) disjunction [2] 97861. Quality 2.7 9787 [] - [] 9788 [atom] - [] 9789 [atom, a] - [1, 2, 3] 9790 [atom, b] - [4] 9791 [var] - [1, 2, 3, 4] 9792Branch determinisms for disjunction [2] 9793 Branch 1: try 9794 Branch 2: retry 9795 Branch 3: retry 9796 Branch 4: trust 9797p / 5: 9798label(1): 9799 get_variable 4 a(2) y(1) 9800 move 3 a(3) y(2) 9801 atom_switch a(1) 9802 a: ref(12) 9803 b: ref(13) 9804 default: ref(fail) 9805 9806label(3): 9807 try_me_else 0 1 ref(5) 9808label(4): 9809 get_atom a(1) a 9810 callf t / 0 Y[1] 9811 move_callf y(1) a(1) a / 1 Y[] 9812 chain e / 0 9813label(5): 9814 retry_me_inline 0 ref(7) Y[1,2,3,4] 9815label(6): 9816 get_atom a(1) a 9817 callf t / 0 Y[2] 9818 move_callf y(2) a(1) b / 1 Y[] 9819 chain e / 0 9820label(7): 9821 retry_me_inline 0 ref(9) Y[1,3,4] 9822label(8): 9823 get_atom a(1) a 9824 callf t / 0 Y[3,4] 9825 move_callf y(3) a(1) c / 1 Y[4] 9826 move_callf y(4) a(1) d / 1 Y[] 9827 chain e / 0 9828label(9): 9829 trust_me_inline 0 Y[1] 9830label(10): 9831 get_atom a(1) b 9832label(13): 9833 callf t / 0 Y[1] 9834 move_callf y(1) a(1) a / 1 Y[] 9835 chain e / 0 9836label(12): 9837 try 0 1 ref(4) 9838 retry_inline 0 ref(6) Y[2,3,4] 9839 trust_inline 0 ref(8) Y[3,4] 9840 9841------ Test env(8) ------- 9842p(a, A, B, C, D) :- 9843 t, 9844 a(A), 9845 e. 9846p(b, A, B, C, D) :- 9847 t, 9848 b(B), 9849 e. 9850p(a, A, B, C, D) :- 9851 t, 9852 c(C), 9853 d(D), 9854 e. 9855p(b, A, B, C, D) :- 9856 t, 9857 a(A), 9858 e. 9859 9860INDEXES for (nondet) disjunction [2] 98611. Quality 2.7 9862 [] - [] 9863 [atom] - [] 9864 [atom, a] - [1, 3] 9865 [atom, b] - [2, 4] 9866 [var] - [1, 2, 3, 4] 9867Branch determinisms for disjunction [2] 9868 Branch 1: try 9869 Branch 2: retry 9870 Branch 3: retry 9871 Branch 4: trust 9872p / 5: 9873label(1): 9874 get_variable 4 a(2) y(1) 9875 move 3 a(3) y(2) 9876 atom_switch a(1) 9877 a: ref(12) 9878 b: ref(13) 9879 default: ref(fail) 9880 9881label(3): 9882 try_me_else 0 1 ref(5) 9883label(4): 9884 get_atom a(1) a 9885 callf t / 0 Y[1] 9886 move_callf y(1) a(1) a / 1 Y[] 9887 chain e / 0 9888label(5): 9889 retry_me_inline 0 ref(7) Y[1,2,3,4] 9890label(6): 9891 get_atom a(1) b 9892 callf t / 0 Y[2] 9893 move_callf y(2) a(1) b / 1 Y[] 9894 chain e / 0 9895label(7): 9896 retry_me_inline 0 ref(9) Y[1,3,4] 9897label(8): 9898 get_atom a(1) a 9899 callf t / 0 Y[3,4] 9900 move_callf y(3) a(1) c / 1 Y[4] 9901 move_callf y(4) a(1) d / 1 Y[] 9902 chain e / 0 9903label(9): 9904 trust_me_inline 0 Y[1] 9905label(10): 9906 get_atom a(1) b 9907 callf t / 0 Y[1] 9908 move_callf y(1) a(1) a / 1 Y[] 9909 chain e / 0 9910label(12): 9911 try 0 1 ref(4) 9912 trust_inline 0 ref(8) Y[3,4] 9913label(13): 9914 try 0 1 ref(6) 9915 trust_inline 0 ref(10) Y[1] 9916 9917------ Test env(20) ------- 9918p(A) :- 9919 p, 9920 q(A). 9921 9922p / 1: 9923label(1): 9924 get_variable 1 a(1) y(1) 9925 callf p / 0 Y[1] 9926 move_chain y(1) a(1) q / 1 9927 9928------ Test env(21) ------- 9929p(A) :- 9930 p, 9931 q(A), 9932 atom(a). 9933 9934p / 1: 9935label(1): 9936 get_variable 1 a(1) y(1) 9937 callf p / 0 Y[1] 9938 move_callf y(1) a(1) q / 1 Y[] 9939 put_atom a(1) a 9940 bi_atom a(1) 9941 exit 9942 9943------ Test env(22) ------- 9944p(A) :- 9945 p, 9946 q(A), 9947 atom(A). 9948 9949p / 1: 9950label(1): 9951 get_variable 1 a(1) y(1) 9952 callf p / 0 Y[1] 9953 move_callf y(1) a(1) q / 1 Y[1] 9954 move y(1) a(1) 9955 bi_atom a(1) 9956 exit 9957 9958------ Test env(23) ------- 9959p(A) :- 9960 q(A). 9961 9962p / 1: 9963label(1): 9964 jmp q / 1 9965 9966------ Test env(24) ------- 9967p(A) :- 9968 q(A), 9969 atom(a). 9970 9971p / 1: 9972label(1): 9973 allocate 0 9974 callf q / 1 Y[] 9975 put_atom a(1) a 9976 bi_atom a(1) 9977 exit 9978 9979------ Test env(25) ------- 9980p(A) :- 9981 q(A), 9982 atom(A). 9983 9984p / 1: 9985label(1): 9986 get_variable 1 a(1) y(1) 9987 callf q / 1 Y[1] 9988 move y(1) a(1) 9989 bi_atom a(1) 9990 exit 9991 9992------ Test env(26) ------- 9993p(A) :- 9994 ( 9995 atom(A) 9996 ; 9997 number(A) 9998 ), 9999 integer(A). 10000 10001INDEXES for (semidet) disjunction [2] 100021. Quality 0.7 10003 [] - [] 10004 [[]] - [1] 10005 [atom] - [1] 10006 [rational] - [2] 10007 [integer] - [2] 10008 [breal] - [2] 10009 [bignum] - [2] 10010 [double] - [2] 10011Branch determinisms for disjunction [2] 10012 Branch 1: det 10013 Branch 2: det 10014p / 1: 10015label(1): 10016 switch_on_type a(1) 10017 meta: ref(fail) 10018 []: ref(7) 10019 atom: ref(7) 10020 bignum: ref(8) 10021 breal: ref(8) 10022 double: ref(8) 10023 goal: ref(fail) 10024 handle: ref(fail) 10025 integer: ref(8) 10026 list: ref(fail) 10027 rational: ref(8) 10028 string: ref(fail) 10029 structure: ref(fail) 10030 10031 branch ref(fail) 10032label(3): 10033 bi_atom a(1) 10034label(7): 10035 get_variable 1 a(1) y(1) 10036 branch ref(6) 10037label(5): 10038 bi_number a(1) 10039label(8): 10040 get_variable 1 a(1) y(1) 10041label(6): 10042 move y(1) a(1) 10043 bi_integer a(1) 10044 exit 10045 10046------ Test env(27) ------- 10047p(A) :- 10048 p, 10049 q(A), 10050 !. 10051 10052p / 1: 10053label(1): 10054 allocate 2 10055 savecut y(1) 10056 move a(1) y(2) 10057 callf p / 0 Y[1,2] 10058 move_callf y(2) a(1) q / 1 Y[1] 10059 cut y(1) 0 10060 exit 10061 10062------ Test env(28) ------- 10063p(A) :- 10064 p, 10065 q(A), 10066 !, 10067 atom(a). 10068 10069p / 1: 10070label(1): 10071 allocate 2 10072 savecut y(1) 10073 move a(1) y(2) 10074 callf p / 0 Y[1,2] 10075 move_callf y(2) a(1) q / 1 Y[1] 10076 cut y(1) 0 10077 put_atom a(1) a 10078 bi_atom a(1) 10079 exit 10080 10081------ Test env(29) ------- 10082p(A) :- 10083 p, 10084 q(A), 10085 !, 10086 atom(A). 10087 10088p / 1: 10089label(1): 10090 allocate 2 10091 savecut y(2) 10092 move a(1) y(1) 10093 callf p / 0 Y[1,2] 10094 move_callf y(1) a(1) q / 1 Y[1,2] 10095 cut y(2) 1 10096 move y(1) a(1) 10097 bi_atom a(1) 10098 exit 10099 10100------ Test env(30) ------- 10101p(A) :- 10102 p, 10103 q(A), 10104 atom(a), 10105 !. 10106 10107p / 1: 10108label(1): 10109 allocate 2 10110 savecut y(1) 10111 move a(1) y(2) 10112 callf p / 0 Y[1,2] 10113 move_callf y(2) a(1) q / 1 Y[1] 10114 put_atom a(1) a 10115 bi_atom a(1) 10116 cut y(1) 0 10117 exit 10118 10119------ Test env(31) ------- 10120p(A) :- 10121 p, 10122 q(A), 10123 atom(A), 10124 !. 10125 10126p / 1: 10127label(1): 10128 allocate 2 10129 savecut y(2) 10130 move a(1) y(1) 10131 callf p / 0 Y[1,2] 10132 move_callf y(1) a(1) q / 1 Y[1,2] 10133 move y(1) a(1) 10134 bi_atom a(1) 10135 cut y(2) 0 10136 exit 10137 10138------ Test env(32) ------- 10139p(A) :- 10140 p(A), 10141 q(A), 10142 atom(a), 10143 ( 10144 var(B) 10145 -> 10146 integer(3) 10147 ; 10148 atom(b) 10149 ). 10150 10151p / 1: 10152label(1): 10153 get_variable 1 a(1) y(1) 10154 callf ref(1) Y[1] 10155 move_callf y(1) a(1) q / 1 Y[] 10156 put_atom a(2) a 10157 bi_atom a(2) 10158 savecut a(1) 10159 try_me_else 0 1 ref(3) 10160label(2): 10161 put_variable a(2) 10162 bi_var a(2) 10163 cut a(1) 0 10164 put_integer a(1) 3 10165 bi_integer a(1) 10166 exit 10167label(3): 10168 trust_me_inline 0 Y[] 10169label(4): 10170 put_atom a(1) b 10171 bi_atom a(1) 10172 exit 10173 10174------ Test true(1) ------- 10175p. 10176 10177p / 0: 10178label(1): 10179 ret 10180 10181------ Test true(2) ------- 10182p :- 10183 true, 10184 true, 10185 true. 10186 10187p / 0: 10188label(1): 10189 ret 10190 10191------ Test true(3) ------- 10192p :- 10193 true, 10194 a, 10195 true, 10196 b, 10197 true. 10198 10199p / 0: 10200label(1): 10201 allocate 0 10202 callf a / 0 Y[] 10203 chain b / 0 10204 10205------ Test true(4) ------- 10206p :- 10207 a, 10208 true, 10209 true, 10210 true, 10211 b, 10212 true, 10213 true, 10214 true. 10215 10216p / 0: 10217label(1): 10218 allocate 0 10219 callf a / 0 Y[] 10220 chain b / 0 10221 10222------ Test true(5) ------- 10223p :- 10224 a, 10225 true, 10226 var(A), 10227 b. 10228 10229p / 0: 10230label(1): 10231 allocate 0 10232 callf a / 0 Y[] 10233 callf true / 0 Y[] 10234 put_variable a(1) 10235 bi_var a(1) 10236 chain b / 0 10237 10238------ Test true(6) ------- 10239p :- 10240 a, 10241 true, 10242 !, 10243 b. 10244p. 10245 10246p / 0: 10247label(1): 10248 allocate 1 10249 savecut y(1) 10250 try_me_else 0 0 ref(3) 10251label(2): 10252 callf a / 0 Y[1] 10253 callf true / 0 Y[1] 10254 cut y(1) 0 10255 chain b / 0 10256label(3): 10257 trust_me_inline 0 Y[] 10258label(4): 10259 exit 10260 10261------ Test true(7) ------- 10262p :- 10263 true, 10264 !, 10265 b. 10266p. 10267 10268p / 0: 10269label(1): 10270 savecut a(1) 10271 try_me_else 0 1 ref(3) 10272label(2): 10273 get_variable 1 a(1) y(1) 10274 callf true / 0 Y[1] 10275 cut y(1) 0 10276 chain b / 0 10277label(3): 10278 trust_me 0 10279label(4): 10280 ret 10281 10282------ Test true(8) ------- 10283p :- 10284 true, 10285 true, 10286 !. 10287p. 10288 10289p / 0: 10290label(1): 10291 savecut a(1) 10292 try_me_else 0 1 ref(3) 10293label(2): 10294 get_variable 1 a(1) y(1) 10295 callf true / 0 Y[1] 10296 cut y(1) 0 10297 deallocate 10298 branch ref(4) 10299label(3): 10300 trust_me 0 10301label(4): 10302 ret 10303 10304------ Test true(9) ------- 10305p :- 10306 ( 10307 var(A), 10308 true 10309 -> 10310 true 10311 ; 10312 true 10313 ), 10314 p. 10315 10316p / 0: 10317label(1): 10318 savecut a(1) 10319 try_me_else 0 1 ref(3) 10320label(2): 10321 put_variable a(2) 10322 bi_var a(2) 10323 get_variable 1 a(1) y(1) 10324 callf true / 0 Y[1] 10325 cut y(1) 0 10326 chain ref(1) 10327label(3): 10328 trust_me 0 10329label(4): 10330 jmp ref(1) 10331 10332------ Test true(10) ------- 10333p :- 10334 q, 10335 ( 10336 true 10337 -> 10338 r 10339 ; 10340 s 10341 ). 10342 10343p / 0: 10344label(1): 10345 allocate 1 10346 callf q / 0 Y[] 10347 savecut a(1) 10348 try_me_else 0 1 ref(3) 10349label(2): 10350 move a(1) y(1) 10351 callf true / 0 Y[1] 10352 cut y(1) 0 10353 chain r / 0 10354label(3): 10355 trust_me_inline 0 Y[] 10356label(4): 10357 chain s / 0 10358 10359------ Test true(11) ------- 10360p(A) :- 10361 true, 10362 q(A). 10363 10364p / 1: 10365label(1): 10366 jmp q / 1 10367 10368------ Test true(12) ------- 10369p(A) :- 10370 q(A), 10371 true. 10372 10373p / 1: 10374label(1): 10375 jmp q / 1 10376 10377------ Test true(13) ------- 10378p :- 10379 ( 10380 true 10381 ; 10382 true 10383 ), 10384 ( 10385 true 10386 ; 10387 true 10388 ). 10389 10390p / 0: 10391label(1): 10392 try_me_else 0 0 ref(3) 10393label(2): 10394 allocate 0 10395label(5): 10396 try_me_else 0 0 ref(7) 10397label(6): 10398 exit 10399label(3): 10400 trust_me 0 10401label(4): 10402 allocate 0 10403 branch ref(5) 10404label(7): 10405 trust_me_inline 0 Y[] 10406label(8): 10407 exit 10408 10409------ Test true(14) ------- 10410p :- 10411 a, 10412 ( 10413 true 10414 ; 10415 true 10416 ). 10417 10418p / 0: 10419label(1): 10420 allocate 0 10421 callf a / 0 Y[] 10422 try_me_else 0 0 ref(3) 10423label(2): 10424 exit 10425label(3): 10426 trust_me_inline 0 Y[] 10427label(4): 10428 exit 10429 10430------ Test true(15) ------- 10431p :- 10432 true, 10433 sepia_kernel : var(A), 10434 b. 10435 10436p / 0: 10437label(1): 10438 allocate 0 10439 callf true / 0 Y[] 10440 put_variable a(1) 10441 bi_var a(1) 10442 chain b / 0 10443 10444------ Test true(16) ------- 10445p :- 10446 true, 10447 A : var(B), 10448 b. 10449 10450p / 0: 10451label(1): 10452 put_variable a(1) 10453 put_structure a(2) var / 1 10454 push_void 10455 put_module a(3) eclipse 10456 allocate 0 10457 callf sepia_kernel : '[]:@' / 3 Y[] 10458 chain b / 0 10459 10460------ Test true(17) ------- 10461p :- 10462 true, 10463 sepia_kernel : nl, 10464 b. 10465 10466p / 0: 10467label(1): 10468 allocate 0 10469 callf sepia_kernel : nl / 0 Y[] 10470 chain b / 0 10471 10472------ Test true(18) ------- 10473p :- 10474 true, 10475 ( 10476 a 10477 ; 10478 b 10479 ). 10480 10481p / 0: 10482label(1): 10483 allocate 0 10484 callf true / 0 Y[] 10485 try_me_else 0 0 ref(3) 10486label(2): 10487 chain a / 0 10488label(3): 10489 trust_me_inline 0 Y[] 10490label(4): 10491 chain b / 0 10492 10493------ Test true(19) ------- 10494p :- 10495 true, 10496 ( 10497 a 10498 -> 10499 b 10500 ). 10501 10502p / 0: 10503label(1): 10504 allocate 1 10505 callf true / 0 Y[] 10506 savecut y(1) 10507 callf a / 0 Y[1] 10508 cut y(1) 0 10509 chain b / 0 10510 10511------ Test true(20) ------- 10512p :- 10513 true, 10514 ( 10515 a 10516 -> 10517 b 10518 ; 10519 c 10520 ). 10521 10522p / 0: 10523label(1): 10524 allocate 1 10525 callf true / 0 Y[] 10526 savecut y(1) 10527 try_me_else 0 0 ref(3) 10528label(2): 10529 callf a / 0 Y[1] 10530 cut y(1) 0 10531 chain b / 0 10532label(3): 10533 trust_me_inline 0 Y[] 10534label(4): 10535 chain c / 0 10536 10537------ Test true(21) ------- 10538p :- 10539 true, 10540 once a. 10541 10542p / 0: 10543label(1): 10544 allocate 1 10545 callf true / 0 Y[] 10546 savecut y(1) 10547 callf a / 0 Y[1] 10548 cut y(1) 0 10549 exit 10550 10551------ Test true(22) ------- 10552p :- 10553 true, 10554 \+ a. 10555 10556p / 0: 10557label(1): 10558 allocate 1 10559 callf true / 0 Y[] 10560 savecut y(1) 10561 try_me_else 0 0 ref(3) 10562label(2): 10563 callf a / 0 Y[1] 10564 cut y(1) 0 10565 failure 10566label(3): 10567 trust_me_inline 0 Y[] 10568label(4): 10569 exit 10570 10571------ Test true(23) ------- 10572p :- 10573 true, 10574 not a. 10575 10576p / 0: 10577label(1): 10578 allocate 1 10579 callf true / 0 Y[] 10580 savecut y(1) 10581 try_me_else 0 0 ref(3) 10582label(2): 10583 callf a / 0 Y[1] 10584 cut y(1) 0 10585 failure 10586label(3): 10587 trust_me_inline 0 Y[] 10588label(4): 10589 exit 10590 10591------ Test true(24) ------- 10592p :- 10593 true, 10594 (4 > 3) @ lists. 10595 10596p / 0: 10597label(1): 10598 allocate 0 10599 callf true / 0 Y[] 10600 put_integer a(1) 4 10601 put_integer a(2) 3 10602 bi_gt a(1) a(2) lists 48 10603 exit 10604 10605------ Test true(25) ------- 10606p :- 10607 true, 10608 writeln(hello) @ lists. 10609 10610p / 0: 10611label(1): 10612 put_atom a(1) hello 10613 put_atom a(2) lists 10614 jmp sepia_kernel : writeln_body / 2 10615 10616------ Test bip(type_tests) ------- 10617p(A) :- 10618 free(A). 10619p(A) :- 10620 is_suspension(A). 10621p(A) :- 10622 is_event(A). 10623p(A) :- 10624 is_handle(A). 10625p(A) :- 10626 nonvar(A). 10627p(A) :- 10628 var(A). 10629p(A) :- 10630 meta(A). 10631p(A) :- 10632 atom(A). 10633p(A) :- 10634 integer(A). 10635p(A) :- 10636 sepia_kernel : bignum(A). 10637p(A) :- 10638 rational(A). 10639p(A) :- 10640 real(A). 10641p(A) :- 10642 float(A). 10643p(A) :- 10644 breal(A). 10645p(A) :- 10646 string(A). 10647p(A) :- 10648 number(A). 10649p(A) :- 10650 atomic(A). 10651p(A) :- 10652 callable(A). 10653p(A) :- 10654 compound(A). 10655p(A) :- 10656 is_list(A). 10657p(A) :- 10658 fail. 10659 10660INDEXES for (nondet) disjunction [2] 106611. Quality 4.4 10662 [] - [21] 10663 [[]] - [5, 8, 17, 18, 20, 21] 10664 [var] - [6, 21] 10665 [var, free] - [1, 6, 21] 10666 [var, meta] - [6, 7, 21] 10667 [atom] - [3, 5, 8, 17, 18, 21] 10668 [bignum] - [5, 9, 10, 16, 17, 21] 10669 [goal] - [2, 5, 17, 21] 10670 [double] - [5, 12, 13, 16, 17, 21] 10671 [list] - [5, 18, 19, 20, 21] 10672 [structure] - [5, 18, 19, 21] 10673 [rational] - [5, 11, 16, 17, 21] 10674 [handle] - [3, 4, 5, 17, 21] 10675 [breal] - [5, 12, 14, 16, 17, 21] 10676 [integer] - [5, 9, 16, 17, 21] 10677 [string] - [5, 15, 17, 21] 10678Branch determinisms for disjunction [2] 10679 Branch 1: try 10680 Branch 2: try 10681 Branch 3: try 10682 Branch 4: retry 10683 Branch 5: retry 10684 Branch 6: retry 10685 Branch 7: retry 10686 Branch 8: retry 10687 Branch 9: retry 10688 Branch 10: retry 10689 Branch 11: retry 10690 Branch 12: retry 10691 Branch 13: retry 10692 Branch 14: retry 10693 Branch 15: retry 10694 Branch 16: retry 10695 Branch 17: retry 10696 Branch 18: retry 10697 Branch 19: retry 10698 Branch 20: retry 10699 Branch 21: trust 10700p / 1: 10701label(1): 10702 switch_on_type a(1) 10703 meta: ref(58) 10704 []: ref(45) 10705 atom: ref(46) 10706 bignum: ref(47) 10707 breal: ref(48) 10708 double: ref(49) 10709 goal: ref(50) 10710 handle: ref(51) 10711 integer: ref(52) 10712 list: ref(53) 10713 rational: ref(54) 10714 string: ref(55) 10715 structure: ref(56) 10716 10717label(57): 10718 try 0 1 ref(3) 10719 retry 0 ref(13) 10720 trust 0 ref(43) 10721label(3): 10722 bi_free a(1) 10723 ret 10724label(5): 10725 bi_is_suspension a(1) 10726 ret 10727label(7): 10728 bi_is_event a(1) 10729 ret 10730label(9): 10731 bi_is_handle a(1) 10732 ret 10733label(11): 10734 bi_nonvar a(1) 10735 ret 10736label(13): 10737 bi_var a(1) 10738 ret 10739label(15): 10740 bi_meta a(1) 10741 ret 10742label(17): 10743 bi_atom a(1) 10744 ret 10745label(19): 10746 bi_integer a(1) 10747 ret 10748label(21): 10749 bi_bignum a(1) 10750 ret 10751label(23): 10752 bi_rational a(1) 10753 ret 10754label(25): 10755 bi_real a(1) 10756 ret 10757label(27): 10758 bi_float a(1) 10759 ret 10760label(29): 10761 bi_breal a(1) 10762 ret 10763label(31): 10764 bi_string a(1) 10765 ret 10766label(33): 10767 bi_number a(1) 10768 ret 10769label(35): 10770 bi_atomic a(1) 10771 ret 10772label(37): 10773 bi_callable a(1) 10774 ret 10775label(39): 10776 bi_compound a(1) 10777 ret 10778label(41): 10779 bi_is_list a(1) 10780 ret 10781label(43): 10782 failure 10783label(45): 10784 try 0 1 ref(11) 10785 retry 0 ref(17) 10786 retry 0 ref(35) 10787 retry 0 ref(37) 10788 retry 0 ref(41) 10789 trust 0 ref(43) 10790label(46): 10791 try 0 1 ref(7) 10792 retry 0 ref(11) 10793 retry 0 ref(17) 10794 retry 0 ref(35) 10795 retry 0 ref(37) 10796 trust 0 ref(43) 10797label(47): 10798 try 0 1 ref(11) 10799 retry 0 ref(19) 10800 retry 0 ref(21) 10801 retry 0 ref(33) 10802 retry 0 ref(35) 10803 trust 0 ref(43) 10804label(48): 10805 try 0 1 ref(11) 10806 retry 0 ref(25) 10807 retry 0 ref(29) 10808 retry 0 ref(33) 10809 retry 0 ref(35) 10810 trust 0 ref(43) 10811label(49): 10812 try 0 1 ref(11) 10813 retry 0 ref(25) 10814 retry 0 ref(27) 10815 retry 0 ref(33) 10816 retry 0 ref(35) 10817 trust 0 ref(43) 10818label(50): 10819 try 0 1 ref(5) 10820 retry 0 ref(11) 10821 retry 0 ref(35) 10822 trust 0 ref(43) 10823label(51): 10824 try 0 1 ref(7) 10825 retry 0 ref(9) 10826 retry 0 ref(11) 10827 retry 0 ref(35) 10828 trust 0 ref(43) 10829label(52): 10830 try 0 1 ref(11) 10831 retry 0 ref(19) 10832 retry 0 ref(33) 10833 retry 0 ref(35) 10834 trust 0 ref(43) 10835label(53): 10836 try 0 1 ref(11) 10837 retry 0 ref(37) 10838 retry 0 ref(39) 10839 retry 0 ref(41) 10840 trust 0 ref(43) 10841label(54): 10842 try 0 1 ref(11) 10843 retry 0 ref(23) 10844 retry 0 ref(33) 10845 retry 0 ref(35) 10846 trust 0 ref(43) 10847label(55): 10848 try 0 1 ref(11) 10849 retry 0 ref(31) 10850 retry 0 ref(35) 10851 trust 0 ref(43) 10852label(56): 10853 try 0 1 ref(11) 10854 retry 0 ref(37) 10855 retry 0 ref(39) 10856 trust 0 ref(43) 10857label(58): 10858 try 0 1 ref(13) 10859 retry 0 ref(15) 10860 trust 0 ref(43) 10861 10862------ Test bip(type_tests_det1) ------- 10863p(A) :- 10864 var(A). 10865p(A) :- 10866 atomic(A). 10867p(A) :- 10868 compound(A). 10869 10870INDEXES for (semidet) disjunction [2] 108711. Quality 1.0 10872 [] - [] 10873 [[]] - [2] 10874 [var] - [1] 10875 [atom] - [2] 10876 [bignum] - [2] 10877 [goal] - [2] 10878 [double] - [2] 10879 [list] - [3] 10880 [structure] - [3] 10881 [rational] - [2] 10882 [handle] - [2] 10883 [breal] - [2] 10884 [integer] - [2] 10885 [string] - [2] 10886Branch determinisms for disjunction [2] 10887 Branch 1: det 10888 Branch 2: det 10889 Branch 3: det 10890p / 1: 10891label(1): 10892 switch_on_type a(1) 10893 meta: ref(9) 10894 []: ref(10) 10895 atom: ref(10) 10896 bignum: ref(10) 10897 breal: ref(10) 10898 double: ref(10) 10899 goal: ref(10) 10900 handle: ref(10) 10901 integer: ref(10) 10902 list: ref(11) 10903 rational: ref(10) 10904 string: ref(10) 10905 structure: ref(11) 10906 10907 branch ref(9) 10908label(3): 10909 bi_var a(1) 10910label(9): 10911 ret 10912label(5): 10913 bi_atomic a(1) 10914label(10): 10915 ret 10916label(7): 10917 bi_compound a(1) 10918label(11): 10919 ret 10920 10921------ Test bip(type_tests_det2) ------- 10922p(A) :- 10923 var(A). 10924p(A) :- 10925 atom(A). 10926p(A) :- 10927 number(A). 10928p(A) :- 10929 string(A). 10930p(A) :- 10931 compound(A). 10932p(A) :- 10933 is_handle(A). 10934p(A) :- 10935 is_suspension(A). 10936 10937INDEXES for (semidet) disjunction [2] 109381. Quality 1.0 10939 [] - [] 10940 [[]] - [2] 10941 [var] - [1] 10942 [atom] - [2] 10943 [bignum] - [3] 10944 [goal] - [7] 10945 [double] - [3] 10946 [list] - [5] 10947 [structure] - [5] 10948 [rational] - [3] 10949 [handle] - [6] 10950 [breal] - [3] 10951 [integer] - [3] 10952 [string] - [4] 10953Branch determinisms for disjunction [2] 10954 Branch 1: det 10955 Branch 2: det 10956 Branch 3: det 10957 Branch 4: det 10958 Branch 5: det 10959 Branch 6: det 10960 Branch 7: det 10961p / 1: 10962label(1): 10963 switch_on_type a(1) 10964 meta: ref(17) 10965 []: ref(18) 10966 atom: ref(18) 10967 bignum: ref(19) 10968 breal: ref(19) 10969 double: ref(19) 10970 goal: ref(15) 10971 handle: ref(20) 10972 integer: ref(19) 10973 list: ref(21) 10974 rational: ref(19) 10975 string: ref(22) 10976 structure: ref(21) 10977 10978 branch ref(17) 10979label(3): 10980 bi_var a(1) 10981label(17): 10982 ret 10983label(5): 10984 bi_atom a(1) 10985label(18): 10986 ret 10987label(7): 10988 bi_number a(1) 10989label(19): 10990 ret 10991label(9): 10992 bi_string a(1) 10993label(22): 10994 ret 10995label(11): 10996 bi_compound a(1) 10997label(21): 10998 ret 10999label(13): 11000 bi_is_handle a(1) 11001label(20): 11002 ret 11003label(15): 11004 bi_is_suspension a(1) 11005 ret 11006 11007------ Test bip(type_tests_det3) ------- 11008p(A) :- 11009 free(A). 11010p(A) :- 11011 meta(A). 11012p(A) :- 11013 callable(A). 11014p(A) :- 11015 number(A). 11016p(A) :- 11017 string(A). 11018p(A) :- 11019 is_handle(A). 11020p(A) :- 11021 is_suspension(A). 11022 11023INDEXES for (semidet) disjunction [2] 110241. Quality 1.0 11025 [] - [] 11026 [[]] - [3] 11027 [var] - [] 11028 [var, free] - [1] 11029 [var, meta] - [2] 11030 [atom] - [3] 11031 [bignum] - [4] 11032 [goal] - [7] 11033 [double] - [4] 11034 [list] - [3] 11035 [structure] - [3] 11036 [rational] - [4] 11037 [handle] - [6] 11038 [breal] - [4] 11039 [integer] - [4] 11040 [string] - [5] 11041Branch determinisms for disjunction [2] 11042 Branch 1: det 11043 Branch 2: det 11044 Branch 3: det 11045 Branch 4: det 11046 Branch 5: det 11047 Branch 6: det 11048 Branch 7: det 11049p / 1: 11050label(1): 11051 switch_on_type a(1) 11052 meta: ref(18) 11053 []: ref(19) 11054 atom: ref(19) 11055 bignum: ref(20) 11056 breal: ref(20) 11057 double: ref(20) 11058 goal: ref(15) 11059 handle: ref(21) 11060 integer: ref(20) 11061 list: ref(19) 11062 rational: ref(20) 11063 string: ref(22) 11064 structure: ref(19) 11065 11066 branch ref(17) 11067label(3): 11068 bi_free a(1) 11069label(17): 11070 ret 11071label(5): 11072 bi_meta a(1) 11073label(18): 11074 ret 11075label(7): 11076 bi_callable a(1) 11077label(19): 11078 ret 11079label(9): 11080 bi_number a(1) 11081label(20): 11082 ret 11083label(11): 11084 bi_string a(1) 11085label(22): 11086 ret 11087label(13): 11088 bi_is_handle a(1) 11089label(21): 11090 ret 11091label(15): 11092 bi_is_suspension a(1) 11093 ret 11094 11095------ Test bip(other) ------- 11096p(A) :- 11097 sepia_kernel : set_bip_error(A). 11098p(A) :- 11099 make_suspension(true, 3, A). 11100p(A) :- 11101 sepia_kernel : make_suspension(true, 3, A, eclipse). 11102 11103p / 1: 11104label(1): 11105 try_me_else 0 1 ref(3) 11106label(2): 11107 bi_set_bip_error a(1) 11108 ret 11109label(3): 11110 retry_me_else 0 ref(5) 11111label(4): 11112 put_atom a(2) true 11113 put_integer a(3) 3 11114 put_module a(4) eclipse 11115 bi_make_suspension a(2) a(3) a(1) a(4) 0 11116 ret 11117label(5): 11118 trust_me 0 11119label(6): 11120 put_atom a(2) true 11121 put_integer a(3) 3 11122 put_module a(4) eclipse 11123 bi_make_suspension a(2) a(3) a(1) a(4) 0 11124 ret 11125 11126------ Test bip(eq) ------- 11127p(A, B) :- 11128 A = B. 11129p(A, B) :- 11130 A == B. 11131p(A, B) :- 11132 A \== B. 11133p(A, B) :- 11134 A ~= B. 11135p(A, B) :- 11136 sepia_kernel : \==(A, B, []). 11137 11138p / 2: 11139label(1): 11140 try_me_else 0 2 ref(3) 11141label(2): 11142 get_value a(1) a(2) 11143 ret 11144label(3): 11145 retry_me_else 0 ref(5) 11146label(4): 11147 get_matched_value a(1) a(2) 11148 ret 11149label(5): 11150 retry_me_else 0 ref(7) 11151label(6): 11152 bi_not_identical a(1) a(2) 11153 ret 11154label(7): 11155 retry_me_else 0 ref(9) 11156label(8): 11157 bi_inequality a(1) a(2) 11158 ret 11159label(9): 11160 trust_me 0 11161label(10): 11162 put_nil a(3) 11163 bi_not_ident_list a(1) a(2) a(3) 11164 ret 11165 11166------ Test bip(arith_comp) ------- 11167p(A, B) :- 11168 A < B. 11169p(A, B) :- 11170 A =< B. 11171p(A, B) :- 11172 A =:= B. 11173p(A, B) :- 11174 A >= B. 11175p(A, B) :- 11176 A > B. 11177p(A, B) :- 11178 A =\= B. 11179 11180p / 2: 11181label(1): 11182 try_me_else 0 2 ref(3) 11183label(2): 11184 bi_lt a(1) a(2) eclipse 48 11185 ret 11186label(3): 11187 retry_me_else 0 ref(5) 11188label(4): 11189 bi_le a(1) a(2) eclipse 48 11190 ret 11191label(5): 11192 retry_me_else 0 ref(7) 11193label(6): 11194 bi_eq a(1) a(2) eclipse 48 11195 ret 11196label(7): 11197 retry_me_else 0 ref(9) 11198label(8): 11199 bi_ge a(1) a(2) eclipse 48 11200 ret 11201label(9): 11202 retry_me_else 0 ref(11) 11203label(10): 11204 bi_gt a(1) a(2) eclipse 48 11205 ret 11206label(11): 11207 trust_me 0 11208label(12): 11209 bi_ne a(1) a(2) eclipse 48 11210 ret 11211 11212------ Test bip(arith_comp_mod) ------- 11213p(A, B, C) :- 11214 sepia_kernel : <(A, B, C). 11215p(A, B, C) :- 11216 sepia_kernel : =<(A, B, C). 11217p(A, B, C) :- 11218 sepia_kernel : =:=(A, B, C). 11219p(A, B, C) :- 11220 sepia_kernel : >=(A, B, C). 11221p(A, B, C) :- 11222 sepia_kernel : >(A, B, C). 11223p(A, B, C) :- 11224 sepia_kernel : =\=(A, B, C). 11225 11226p / 3: 11227label(1): 11228 try_me_else 0 3 ref(3) 11229label(2): 11230 bi_lt a(1) a(2) a(3) 0 11231 ret 11232label(3): 11233 retry_me_else 0 ref(5) 11234label(4): 11235 bi_le a(1) a(2) a(3) 0 11236 ret 11237label(5): 11238 retry_me_else 0 ref(7) 11239label(6): 11240 bi_eq a(1) a(2) a(3) 0 11241 ret 11242label(7): 11243 retry_me_else 0 ref(9) 11244label(8): 11245 bi_ge a(1) a(2) a(3) 0 11246 ret 11247label(9): 11248 retry_me_else 0 ref(11) 11249label(10): 11250 bi_gt a(1) a(2) a(3) 0 11251 ret 11252label(11): 11253 trust_me 0 11254label(12): 11255 bi_ne a(1) a(2) a(3) 0 11256 ret 11257 11258------ Test bip(functions) ------- 11259p(A) :- 11260 get_bip_error(B), 11261 B - C, 11262 +(C, 1, D), 11263 +(B, C, D), 11264 -(D, 1, E), 11265 -(D, C, E), 11266 *(E, 2, F), 11267 /(F, 2, G), 11268 //(G, 2, H), 11269 rem(H, 2, I), 11270 div(I, 2, J), 11271 mod(J, 2, K), 11272 /\(K, 2, L), 11273 \/(L, 2, M), 11274 xor(M, 2, N), 11275 \(N, O), 11276 arity(foo(a, b, c), 3), 11277 arg(O, foo(a, b, c), A). 11278 11279p / 1: 11280label(1): 11281 get_variable 2 a(1) y(1) 11282 put_global_variable_callf a(1) y(2) get_bip_error / 1 Y[1,2] 11283 move y(2) a(1) 11284 bi_minus a(1) a(2) 4 11285 bi_addi a(2) 1 a(3) 24 11286 bi_add a(1) a(2) a(1) 16 11287 get_value a(1) a(3) 11288 bi_addi a(3) -1 a(1) 24 11289 bi_sub a(3) a(2) a(2) 16 11290 get_value a(2) a(1) 11291 put_integer a(2) 2 11292 bi_mul a(1) a(2) a(1) 16 11293 put_integer a(2) 2 11294 bi_quot a(1) a(2) a(1) 16 11295 put_integer a(2) 2 11296 bi_div a(1) a(2) a(1) 16 11297 put_integer a(2) 2 11298 bi_rem a(1) a(2) a(1) 16 11299 put_integer a(2) 2 11300 bi_fdiv a(1) a(2) a(1) 16 11301 put_integer a(2) 2 11302 bi_mod a(1) a(2) a(1) 16 11303 put_integer a(2) 2 11304 bi_and a(1) a(2) a(1) 16 11305 put_integer a(2) 2 11306 bi_or a(1) a(2) a(1) 16 11307 put_integer a(2) 2 11308 bi_xor a(1) a(2) a(1) 16 11309 bi_bitnot a(1) a(1) 4 11310 put_structure a(2) foo / 3 11311 write_atom2 a b 11312 write_atom c 11313 bi_arity a(2) a(2) 4 11314 get_integer a(2) 3 11315 put_structure a(2) foo / 3 11316 write_atom2 a b 11317 write_atom c 11318 bi_arg a(1) a(2) a(1) 16 11319 get_value a(1) y(1) 11320 exit 11321 11322------ Test bip(1) ------- 11323p(A, B) :- 11324 +(A, B, C), 11325 -(C, 1, D), 11326 p(D). 11327 11328p / 2: 11329label(1): 11330 bi_add a(1) a(2) a(2) 16 11331 bi_addi a(2) -1 a(1) 24 11332 jmp p / 1 11333 11334------ Test bip(2) ------- 11335p(A, B) :- 11336 +(A, B, C), 11337 -(A, B, C). 11338 11339p / 2: 11340label(1): 11341 bi_add a(1) a(2) a(3) 16 11342 bi_sub a(1) a(2) a(1) 16 11343 get_value a(1) a(3) 11344 ret 11345 11346------ Test bip(3) ------- 11347p(A, B) :- 11348 +(A, B, 0). 11349 11350p / 2: 11351label(1): 11352 bi_add a(1) a(2) a(1) 16 11353 get_integer a(1) 0 11354 ret 11355 11356------ Test bip(4) ------- 11357p(A, B) :- 11358 +(A, B, foo(bar)). 11359 11360p / 2: 11361label(1): 11362 bi_add a(1) a(2) a(1) 16 11363 get_structure a(1) foo / 1 ref(2) 11364 write_atom bar 11365 ret 11366label(2): 11367 read_atom bar 11368 ret 11369 11370------ Test bip(5) ------- 11371p(A, B) :- 11372 +(A, 1, B). 11373 11374p / 2: 11375label(1): 11376 bi_addi a(1) 1 a(1) 24 11377 get_value a(1) a(2) 11378 ret 11379 11380------ Test bip(6) ------- 11381p(A, B) :- 11382 +(A, B, C), 11383 q, 11384 p(C). 11385 11386p / 2: 11387label(1): 11388 bi_add a(1) a(2) a(1) 16 11389 get_variable 1 a(1) y(1) 11390 callf q / 0 Y[1] 11391 move_chain y(1) a(1) p / 1 11392 11393------ Test bip(7) ------- 11394p(A, B) :- 11395 q, 11396 +(A, B, C), 11397 p(C). 11398 11399p / 2: 11400label(1): 11401 get_variable 2 a(1) y(1) 11402 move a(2) y(2) 11403 callf q / 0 Y[1,2] 11404 move 2 y(1) a(2) 11405 bi_add a(2) a(3) a(1) 16 11406 chain p / 1 11407 11408------ Test bip(8) ------- 11409p(A, B) :- 11410 q(C), 11411 +(A, B, C), 11412 p(C). 11413 11414p / 2: 11415label(1): 11416 get_variable 3 a(1) y(1) 11417 move a(2) y(2) 11418 put_global_variable_callf a(1) y(3) q / 1 Y[1,2,3] 11419 move 2 y(1) a(2) 11420 bi_add a(2) a(3) a(2) 16 11421 get_value a(2) y(3) 11422 move_chain y(3) a(1) p / 1 11423 11424------ Test bip(9) ------- 11425p(A, B) :- 11426 q(C), 11427 +(A, B, C), 11428 -(A, B, C), 11429 p(C). 11430 11431p / 2: 11432label(1): 11433 get_variable 3 a(1) y(1) 11434 move a(2) y(2) 11435 put_global_variable_callf a(1) y(3) q / 1 Y[1,2,3] 11436 move 2 y(1) a(2) 11437 bi_add a(2) a(3) a(4) 16 11438 get_value a(4) y(3) 11439 bi_sub a(2) a(3) a(2) 16 11440 get_value a(2) y(3) 11441 move_chain y(3) a(1) p / 1 11442 11443------ Test bip(10) ------- 11444p(A, B) :- 11445 +(A, B, C). 11446 11447p / 2: 11448label(1): 11449 bi_add a(1) a(2) a(1) 16 11450 ret 11451 11452------ Test bip(20) ------- 11453p(A, B) :- 11454 A > B. 11455 11456p / 2: 11457label(1): 11458 bi_gt a(1) a(2) eclipse 48 11459 ret 11460 11461------ Test inline(1) ------- 11462:- inline(i1 / 1). 11463i1(1). 11464i1(2). 11465p(A) :- 11466 i1(A). 11467q(A) :- 11468 r, 11469 i1(A), 11470 s. 11471 11472:- inline(i1 / 1). 11473INDEXES for (nondet) disjunction [2] 114741. Quality 1.3 11475 [] - [] 11476 [var] - [1, 2] 11477 [integer] - [] 11478 [integer, 1] - [1] 11479 [integer, 2] - [2] 11480Branch determinisms for disjunction [2] 11481 Branch 1: try 11482 Branch 2: trust 11483i1 / 1: 11484label(1): 11485 integer_switch a(1) 11486 1: ref(7) 11487 2: ref(8) 11488 default: ref(fail) 11489 11490label(2): 11491 try_me_else 0 1 ref(4) 11492label(3): 11493 get_integer a(1) 1 11494label(7): 11495 ret 11496label(4): 11497 trust_me 0 11498label(5): 11499 get_integer a(1) 2 11500label(8): 11501 ret 11502INDEXES for (nondet) disjunction [2] 115031. Quality 1.3 11504 [] - [] 11505 [var] - [1, 2] 11506 [integer] - [] 11507 [integer, 1] - [1] 11508 [integer, 2] - [2] 11509Branch determinisms for disjunction [2] 11510 Branch 1: try 11511 Branch 2: trust 11512p / 1: 11513label(1): 11514 integer_switch a(1) 11515 1: ref(7) 11516 2: ref(8) 11517 default: ref(fail) 11518 11519label(2): 11520 try_me_else 0 1 ref(4) 11521label(3): 11522 get_integer a(1) 1 11523label(7): 11524 ret 11525label(4): 11526 trust_me 0 11527label(5): 11528 get_integer a(1) 2 11529label(8): 11530 ret 11531INDEXES for (nondet) disjunction [3] 115321. Quality 1.3 11533 [] - [] 11534 [var] - [1, 2] 11535 [integer] - [] 11536 [integer, 1] - [1] 11537 [integer, 2] - [2] 11538Branch determinisms for disjunction [3] 11539 Branch 1: try 11540 Branch 2: trust 11541q / 1: 11542label(1): 11543 get_variable 1 a(1) y(1) 11544 callf r / 0 Y[1] 11545 integer_switch y(1) 11546 1: ref(4) 11547 2: ref(6) 11548 default: ref(fail) 11549 11550label(3): 11551 try_me_else 0 0 ref(5) 11552label(4): 11553 move y(1) a(1) 11554 get_integer a(1) 1 11555 chain s / 0 11556label(5): 11557 trust_me_inline 0 Y[1] 11558label(6): 11559 move y(1) a(1) 11560 get_integer a(1) 2 11561 chain s / 0 11562 11563------ Test inline(2) ------- 11564:- inline(i2 / 1). 11565i2(A) :- 11566 r(A), 11567 !. 11568i2(A) :- 11569 s. 11570p(A) :- 11571 q, 11572 i2(A), 11573 t(A). 11574 11575:- inline(i2 / 1). 11576i2 / 1: 11577label(1): 11578 allocate 1 11579 savecut y(1) 11580 try_me_else 0 1 ref(3) 11581label(2): 11582 callf r / 1 Y[1] 11583 cut y(1) 0 11584 exit 11585label(3): 11586 trust_me_inline 0 Y[] 11587label(4): 11588 chain s / 0 11589p / 1: 11590label(1): 11591 get_variable 2 a(1) y(1) 11592 callf q / 0 Y[1] 11593 savecut y(2) 11594 try_me_else 0 0 ref(3) 11595label(2): 11596 move_callf y(1) a(1) r / 1 Y[1,2] 11597 cut y(2) 1 11598 move_chain y(1) a(1) t / 1 11599label(3): 11600 trust_me_inline 0 Y[1] 11601label(4): 11602 callf s / 0 Y[1] 11603 move_chain y(1) a(1) t / 1 11604 11605------ Test bench(1) ------- 11606conc([], A, A). 11607conc([A|B], C, [A|D]) :- 11608 conc(B, C, D). 11609 11610INDEXES for (nondet) disjunction [2] 116111. Quality 1.3 11612 [] - [] 11613 [list] - [2] 11614 [[]] - [1] 11615 [var] - [1, 2] 116162. Quality 1.5 11617 [] - [1] 11618 [list] - [1, 2] 11619 [var] - [1, 2] 11620Branch determinisms for disjunction [2] 11621 Branch 1: try 11622 Branch 2: trust 11623conc / 3: 11624label(1): 11625 list_switch a(1) ref(7) ref(12) ref(fail) 11626 list_switch a(3) ref(3) ref(4) ref(4) 11627label(3): 11628 try_me_else 0 3 ref(5) 11629label(4): 11630 get_nil a(1) 11631label(12): 11632 get_value a(3) a(2) 11633 ret 11634label(5): 11635 trust_me 0 11636label(6): 11637 get_list a(1) ref(7) 11638 write_variable2 a(4) a(1) 11639 branch ref(8) 11640label(7): 11641 read_variable2 a(4) a(1) 11642label(8): 11643 get_list a(3) ref(9) 11644 write_value a(4) 11645 write_variable a(3) 11646 jmp ref(1) 11647label(9): 11648 read_value a(4) 11649 read_variable a(3) 11650 jmp ref(1) 11651 11652------ Test bench(2) ------- 11653conc(A, B, C) :- 11654 ( 11655 A = [], 11656 B = D, 11657 C = D 11658 ; 11659 A = [E|F], 11660 B = D, 11661 C = [E|G], 11662 conc(F, D, G) 11663 ). 11664 11665INDEXES for (nondet) disjunction [2] 116661. Quality 1.3 11667 [] - [] 11668 [list] - [2] 11669 [[]] - [1] 11670 [var] - [1, 2] 116712. Quality 1.5 11672 [] - [1] 11673 [list] - [1, 2] 11674 [var] - [1, 2] 11675Branch determinisms for disjunction [2] 11676 Branch 1: try 11677 Branch 2: trust 11678conc / 3: 11679label(1): 11680 list_switch a(1) ref(7) ref(12) ref(fail) 11681 list_switch a(3) ref(3) ref(4) ref(4) 11682label(3): 11683 try_me_else 0 3 ref(5) 11684label(4): 11685 get_nil a(1) 11686label(12): 11687 move a(2) a(1) 11688 get_value a(3) a(1) 11689 ret 11690label(5): 11691 trust_me 0 11692label(6): 11693 get_list a(1) ref(7) 11694 write_variable2 a(4) a(1) 11695 branch ref(8) 11696label(7): 11697 read_variable2 a(4) a(1) 11698label(8): 11699 get_list a(3) ref(9) 11700 write_value a(4) 11701 write_variable a(3) 11702 jmp ref(1) 11703label(9): 11704 read_value a(4) 11705 read_variable a(3) 11706 jmp ref(1) 11707 11708------ Test bench(3) ------- 11709conc(A, B, C) :- 11710 ( 11711 A = [D|E], 11712 B = F, 11713 C = [D|G], 11714 conc(E, F, G) 11715 ; 11716 A = [], 11717 B = F, 11718 C = F 11719 ). 11720 11721INDEXES for (nondet) disjunction [2] 117221. Quality 1.3 11723 [] - [] 11724 [[]] - [2] 11725 [list] - [1] 11726 [var] - [1, 2] 117272. Quality 1.5 11728 [] - [2] 11729 [list] - [1, 2] 11730 [var] - [1, 2] 11731Branch determinisms for disjunction [2] 11732 Branch 1: try 11733 Branch 2: trust 11734conc / 3: 11735label(1): 11736 list_switch a(1) ref(5) ref(12) ref(fail) 11737 list_switch a(3) ref(3) ref(10) ref(10) 11738label(3): 11739 try_me_else 0 3 ref(9) 11740label(4): 11741 get_list a(1) ref(5) 11742 write_variable2 a(4) a(1) 11743 branch ref(6) 11744label(5): 11745 read_variable2 a(4) a(1) 11746label(6): 11747 get_list a(3) ref(7) 11748 write_value a(4) 11749 write_variable a(3) 11750 jmp ref(1) 11751label(7): 11752 read_value a(4) 11753 read_variable a(3) 11754 jmp ref(1) 11755label(9): 11756 trust_me 0 11757label(10): 11758 get_nil a(1) 11759label(12): 11760 move a(2) a(1) 11761 get_value a(3) a(1) 11762 ret 11763 11764------ Test bench(4) ------- 11765conc(e(A), B, B). 11766conc(f(A, B), C, f(A, D)) :- 11767 conc(B, C, D). 11768 11769INDEXES for (nondet) disjunction [2] 117701. Quality 1.3 11771 [] - [] 11772 [structure] - [] 11773 [structure, e / 1] - [1] 11774 [structure, f / 2] - [2] 11775 [var] - [1, 2] 117762. Quality 1.5 11777 [] - [1] 11778 [structure] - [1] 11779 [structure, f / 2] - [1, 2] 11780 [var] - [1, 2] 11781Branch determinisms for disjunction [2] 11782 Branch 1: try 11783 Branch 2: trust 11784conc / 3: 11785label(1): 11786 functor_switch a(1) 11787 e / 1: ref(6) 11788 f / 2: ref(9) 11789 default: ref(fail) 11790 11791 functor_switch a(3) 11792 f / 2: ref(4) 11793 default: ref(5) 11794 11795label(4): 11796 try_me_else 0 3 ref(7) 11797label(5): 11798 get_structure a(1) e / 1 ref(6) 11799 write_void 11800label(6): 11801 get_value a(3) a(2) 11802 ret 11803label(7): 11804 trust_me 0 11805label(8): 11806 get_structure a(1) f / 2 ref(9) 11807 write_variable2 a(4) a(1) 11808 branch ref(10) 11809label(9): 11810 read_variable2 a(4) a(1) 11811label(10): 11812 get_structure a(3) f / 2 ref(11) 11813 write_value a(4) 11814 write_variable a(3) 11815 jmp ref(1) 11816label(11): 11817 read_value a(4) 11818 read_variable a(3) 11819 jmp ref(1) 11820 11821------ Test bench(5) ------- 11822conc(A, B, C) :- 11823 ( 11824 A = e(D), 11825 B = E, 11826 C = E 11827 ; 11828 A = f(F, G), 11829 B = E, 11830 C = f(F, H), 11831 conc(G, E, H) 11832 ). 11833 11834INDEXES for (nondet) disjunction [2] 118351. Quality 1.3 11836 [] - [] 11837 [structure] - [] 11838 [structure, e / 1] - [1] 11839 [structure, f / 2] - [2] 11840 [var] - [1, 2] 118412. Quality 1.5 11842 [] - [1] 11843 [structure] - [1] 11844 [structure, f / 2] - [1, 2] 11845 [var] - [1, 2] 11846Branch determinisms for disjunction [2] 11847 Branch 1: try 11848 Branch 2: trust 11849conc / 3: 11850label(1): 11851 functor_switch a(1) 11852 e / 1: ref(6) 11853 f / 2: ref(9) 11854 default: ref(fail) 11855 11856 functor_switch a(3) 11857 f / 2: ref(4) 11858 default: ref(5) 11859 11860label(4): 11861 try_me_else 0 3 ref(7) 11862label(5): 11863 get_structure a(1) e / 1 ref(6) 11864 write_void 11865label(6): 11866 move a(2) a(1) 11867 get_value a(3) a(1) 11868 ret 11869label(7): 11870 trust_me 0 11871label(8): 11872 get_structure a(1) f / 2 ref(9) 11873 write_variable2 a(4) a(1) 11874 branch ref(10) 11875label(9): 11876 read_variable2 a(4) a(1) 11877label(10): 11878 get_structure a(3) f / 2 ref(11) 11879 write_value a(4) 11880 write_variable a(3) 11881 jmp ref(1) 11882label(11): 11883 read_value a(4) 11884 read_variable a(3) 11885 jmp ref(1) 11886 11887------ Test bench(6) ------- 11888conc([], A, B) :- 11889 !, 11890 A = B. 11891conc([A|B], C, [A|D]) :- 11892 conc(B, C, D). 11893 11894INDEXES for (semidet) disjunction [2] 118951. Quality 1.0 11896 [] - [] 11897 [list] - [2] 11898 [[]] - [1] 11899 [var] - [1] 11900Branch determinisms for disjunction [2] 11901 Branch 1: det 11902 Branch 2: det 11903conc / 3: 11904label(1): 11905 list_switch a(1) ref(6) ref(11) ref(fail) 11906label(3): 11907 get_nil a(1) 11908label(11): 11909 get_value a(2) a(3) 11910 ret 11911label(6): 11912 read_variable2 a(4) a(1) 11913label(7): 11914 get_list a(3) ref(8) 11915 write_value a(4) 11916 write_variable a(3) 11917 jmp ref(1) 11918label(8): 11919 read_value a(4) 11920 read_variable a(3) 11921 jmp ref(1) 11922 11923------ Test bench(7) ------- 11924conc([], A, B) :- 11925 t, 11926 !, 11927 A = B. 11928conc([A|B], C, [A|D]) :- 11929 conc(B, C, D). 11930 11931INDEXES for (nondet) disjunction [2] 119321. Quality 1.3 11933 [] - [] 11934 [list] - [2] 11935 [[]] - [1] 11936 [var] - [1, 2] 119372. Quality 1.5 11938 [] - [1] 11939 [list] - [1, 2] 11940 [var] - [1, 2] 11941Branch determinisms for disjunction [2] 11942 Branch 1: try 11943 Branch 2: trust 11944conc / 3: 11945label(1): 11946 allocate 3 11947 savecut y(1) 11948 list_switch a(1) ref(7) ref(12) ref(fail) 11949 list_switch a(3) ref(3) ref(4) ref(4) 11950label(3): 11951 try_me_else 0 3 ref(5) 11952label(4): 11953 get_nil a(1) 11954label(12): 11955 move 2 a(2) y(2) 11956 callf t / 0 Y[1,2,3] 11957 cut y(1) 3 11958 get_value y(2) y(3) 11959 exit 11960label(5): 11961 trust_me_inline 0 Y[] 11962label(6): 11963 get_list a(1) ref(7) 11964 write_variable2 a(4) a(1) 11965 branch ref(8) 11966label(7): 11967 read_variable2 a(4) a(1) 11968label(8): 11969 get_list a(3) ref(9) 11970 write_value a(4) 11971 write_variable a(3) 11972 chain ref(1) 11973label(9): 11974 read_value a(4) 11975 read_variable a(3) 11976 chain ref(1) 11977 11978------ Test bench(tak) ------- 11979tak(A, B, C, D) :- 11980 ( 11981 A =< B 11982 -> 11983 C = D 11984 ; 11985 E is A - 1, 11986 tak(E, B, C, F), 11987 G is B - 1, 11988 tak(G, C, A, H), 11989 I is C - 1, 11990 tak(I, A, B, J), 11991 tak(F, H, J, D) 11992 ). 11993 11994tak / 4: 11995label(1): 11996 savecut a(5) 11997 try_me_else 0 5 ref(3) 11998label(2): 11999 bi_le a(1) a(2) eclipse 48 12000 cut a(5) 12001 get_value a(3) a(4) 12002 ret 12003label(3): 12004 trust_me 0 12005label(4): 12006 bi_addi a(1) -1 a(5) 24 12007 get_variable 7 a(1) y(5) 12008 move 2 a(2) y(6) 12009 move a(4) y(3) 12010 put_global_variable a(4) y(4) 12011 move a(5) a(1) 12012 callf ref(1) Y[3,4,5,6,7] 12013 move y(6) a(5) 12014 bi_addi a(5) -1 a(1) 24 12015 put_global_variable a(4) y(2) 12016 move y(7) a(2) y(5) a(3) 12017 callf ref(1) Y[2,3,4,5,6,7] 12018 move y(7) a(5) 12019 bi_addi a(5) -1 a(1) 24 12020 put_global_variable a(4) y(1) 12021 move 2 y(5) a(2) 12022 callf ref(1) Y[1,2,3,4] 12023 move y(4) a(1) y(2) a(2) y(1) a(3) 12024 move_chain y(3) a(4) ref(1) 12025 12026------ Test bench(takc) ------- 12027tak(A, B, C, D) :- 12028 A =< B, 12029 !, 12030 C = D. 12031tak(A, B, C, D) :- 12032 E is A - 1, 12033 tak(E, B, C, F), 12034 G is B - 1, 12035 tak(G, C, A, H), 12036 I is C - 1, 12037 tak(I, A, B, J), 12038 tak(F, H, J, D). 12039 12040tak / 4: 12041label(1): 12042 savecut a(5) 12043 try_me_else 0 5 ref(3) 12044label(2): 12045 bi_le a(1) a(2) eclipse 48 12046 cut a(5) 12047 get_value a(3) a(4) 12048 ret 12049label(3): 12050 trust_me 0 12051label(4): 12052 bi_addi a(1) -1 a(5) 24 12053 get_variable 7 a(1) y(5) 12054 move 2 a(2) y(6) 12055 move a(4) y(3) 12056 put_global_variable a(4) y(4) 12057 move a(5) a(1) 12058 callf ref(1) Y[3,4,5,6,7] 12059 move y(6) a(5) 12060 bi_addi a(5) -1 a(1) 24 12061 put_global_variable a(4) y(2) 12062 move y(7) a(2) y(5) a(3) 12063 callf ref(1) Y[2,3,4,5,6,7] 12064 move y(7) a(5) 12065 bi_addi a(5) -1 a(1) 24 12066 put_global_variable a(4) y(1) 12067 move 2 y(5) a(2) 12068 callf ref(1) Y[1,2,3,4] 12069 move y(4) a(1) y(2) a(2) y(1) a(3) 12070 move_chain y(3) a(4) ref(1) 12071 12072------ Test bug(1) ------- 12073simplify_code([], []). 12074simplify_code([code(A, B, C)|D], E) :- 12075 ( 12076 simplify(A, D, F) 12077 -> 12078 simplify_code(F, E) 12079 ; 12080 E = [A|F], 12081 simplify_code(D, F) 12082 ). 12083 12084INDEXES for (nondet) disjunction [2] 120851. Quality 1.3 12086 [] - [] 12087 [list] - [2] 12088 [[]] - [1] 12089 [var] - [1, 2] 120902. Quality 1.5 12091 [] - [2] 12092 [[]] - [1, 2] 12093 [var] - [1, 2] 12094Branch determinisms for disjunction [2] 12095 Branch 1: try 12096 Branch 2: trust 12097INDEXES for (nondet) disjunction [2, 2, 2] 120981. Quality 1.5 12099 [] - [1] 12100 [list] - [1, 2] 12101 [var] - [1, 2] 12102Branch determinisms for disjunction [2, 2, 2] 12103 Branch 1: try 12104 Branch 2: trust 12105simplify_code / 2: 12106label(1): 12107 list_switch a(1) ref(8) ref(18) ref(fail) 12108 list_switch a(2) ref(6) ref(3) ref(6) 12109label(3): 12110 try_me_else 0 2 ref(5) 12111label(4): 12112 get_nil a(1) 12113label(18): 12114 get_nil a(2) 12115 ret 12116label(5): 12117 trust_me 0 12118label(6): 12119 get_list a(1) ref(8) 12120 write_first_structure code / 3 12121label(7): 12122 write_variable a(3) 12123 write_void 2 12124 mode t(0) ref(9) 12125 write_variable a(1) 12126 branch ref(10) 12127label(8): 12128 read_structure code / 3 ref(7) 12129 read_variable a(3) 12130 mode t(0) 12131label(9): 12132 read_variable a(1) 12133label(10): 12134 space -1 12135 allocate 3 12136 savecut y(1) 12137 list_switch a(2) ref(11) ref(12) ref(12) 12138label(11): 12139 try_me_else 0 3 ref(13) 12140label(12): 12141 move a(2) y(2) 12142 shift a(2) a(1) a(3) 12143 put_global_variable_callf a(3) y(3) simplify / 3 Y[1,2,3] 12144 cut y(1) 3 12145 move y(3) a(1) y(2) a(2) 12146 chain ref(1) 12147label(13): 12148 trust_me_inline 0 Y[] 12149label(14): 12150 get_list a(2) ref(15) 12151 write_value a(3) 12152 write_variable a(2) 12153 chain ref(1) 12154label(15): 12155 read_value a(3) 12156 read_variable a(2) 12157 chain ref(1) 12158 12159------ Test bug(2) ------- 12160loop(A) :- 12161 ( 12162 foreach(B, A) 12163 do 12164 writeln(B) 12165 ). 12166 12167loop / 1: 12168label(1): 12169 jmp do__2 / 1 12170 12171------ Test bug(3) ------- 12172p(A, B, C) :- 12173 ( 12174 A = B 12175 -> 12176 C = foo 12177 ; 12178 else 12179 ). 12180 12181p / 3: 12182label(1): 12183 savecut a(4) 12184 try_me_else 0 4 ref(3) 12185label(2): 12186 get_value a(1) a(2) 12187 cut a(4) 12188 get_atom a(3) foo 12189 ret 12190label(3): 12191 trust_me 0 12192label(4): 12193 jmp (else) / 0 12194 12195------ Test bug(4) ------- 12196p(A, B, C) :- 12197 ( 12198 A == B 12199 -> 12200 D = temp, 12201 C = E 12202 ; 12203 C = [F|E] 12204 ). 12205 12206p / 3: 12207label(1): 12208 savecut a(4) 12209 try_me_else 0 4 ref(3) 12210label(2): 12211 get_matched_value a(1) a(2) 12212 cut a(4) 12213 ret 12214label(3): 12215 trust_me 0 12216label(4): 12217 get_list a(3) ref(5) 12218 write_void 2 12219 ret 12220label(5): 12221 ret 12222 12223------ Test bug(5) ------- 12224indexing_transformation([A|B], C) :- 12225 ( 12226 A = disjunction(D) 12227 -> 12228 then 12229 ; 12230 C = [E|F] 12231 ). 12232 12233INDEXES for (semidet) disjunction [2] 122341. Quality 1.0 12235 [] - [2] 12236 [structure] - [2] 12237 [structure, disjunction / 1] - [1] 12238 [var] - [1] 12239Branch determinisms for disjunction [2] 12240 Branch 1: det 12241 Branch 2: det 12242indexing_transformation / 2: 12243label(1): 12244 get_list a(1) ref(2) 12245 write_variable a(1) 12246 write_void 12247 functor_switch a(1) 12248 disjunction / 1: ref(6) 12249 default: ref(8) 12250 12251label(5): 12252 get_structure a(1) disjunction / 1 ref(6) 12253 write_void 12254label(6): 12255 jmp (then) / 0 12256label(2): 12257 read_variable a(1) 12258 functor_switch a(1) 12259 disjunction / 1: ref(6) 12260 default: ref(8) 12261 12262 branch ref(5) 12263label(8): 12264 get_list a(2) ref(9) 12265 write_void 2 12266label(9): 12267 ret 12268 12269------ Test bug(6) ------- 12270insert_after_head(A, B, C) :- 12271 ( 12272 B = [D|E], 12273 D = goal(head, F) 12274 -> 12275 C = [D, A|E] 12276 ; 12277 C = [A|B] 12278 ). 12279 12280INDEXES for (nondet) disjunction [2] 122811. Quality 1.5 12282 [] - [2] 12283 [list] - [1, 2] 12284 [var] - [1, 2] 12285Branch determinisms for disjunction [2] 12286 Branch 1: try 12287 Branch 2: trust 12288insert_after_head / 3: 12289label(1): 12290 savecut a(4) 12291 list_switch a(2) ref(2) ref(11) ref(11) 12292label(2): 12293 try_me_else 0 4 ref(10) 12294label(3): 12295 get_list a(2) ref(4) 12296 write_variable2 a(2) a(5) 12297 branch ref(5) 12298label(4): 12299 read_variable2 a(2) a(5) 12300label(5): 12301 get_structure a(2) goal / 2 ref(6) 12302 write_atom head 12303 write_void 12304 branch ref(7) 12305label(6): 12306 read_atom head 12307label(7): 12308 cut a(4) 12309 get_list a(3) ref(9) 12310 write_value a(2) 12311 write_list 12312label(8): 12313 write_value a(1) 12314 write_value a(5) 12315 ret 12316label(9): 12317 read_value a(2) 12318 read_last_list ref(8) 12319 read_value a(1) 12320 read_value a(5) 12321 ret 12322label(10): 12323 trust_me 0 12324label(11): 12325 get_list a(3) ref(12) 12326 write_value a(1) 12327 write_value a(2) 12328 ret 12329label(12): 12330 read_value a(1) 12331 read_value a(2) 12332 ret 12333 12334------ Test bug(7) ------- 12335declaration_warning_handler(A, B, lists) :- 12336 !. 12337declaration_warning_handler(A, B, profile) :- 12338 !. 12339declaration_warning_handler(75, A, B) :- 12340 !, 12341 get_flag_body(A, definition_module, C, B), 12342 get_deprecation_advice(A, C, D), 12343 !, 12344 warning_handler(75, A, B), 12345 printf(warning_output, " Advice: %w%n", [D]). 12346declaration_warning_handler(85, A : B, C) :- 12347 known_library(A), 12348 !. 12349declaration_warning_handler(A, B, C) :- 12350 warning_handler(A, B, C). 12351 12352INDEXES for (nondet) disjunction [2] 123531. Quality 1.7 12354 [] - [3, 4, 5] 12355 [atom] - [3, 4, 5] 12356 [atom, profile] - [2] 12357 [atom, lists] - [1] 12358 [var] - [1] 123592. Quality 3.3 12360 [] - [1, 2, 5] 12361 [var] - [1, 2, 3] 12362 [integer] - [1, 2, 5] 12363 [integer, 85] - [1, 2, 4, 5] 12364 [integer, 75] - [1, 2, 3] 12365Branch determinisms for disjunction [2] 12366 Branch 1: det 12367 Branch 2: det 12368 Branch 3: try 12369 Branch 4: retry 12370 Branch 5: trust 12371declaration_warning_handler / 3: 12372label(1): 12373 savecut a(4) 12374 atom_switch a(3) 12375 profile: ref(21) 12376 lists: ref(22) 12377 default: ref(17) 12378 12379label(5): 12380 get_atom a(3) lists 12381label(22): 12382 ret 12383label(7): 12384 get_atom a(3) profile 12385label(21): 12386 ret 12387label(9): 12388 get_integer a(1) 75 12389 cut a(4) 12390 get_variable 5 a(2) y(2) 12391 move 2 a(3) y(3) 12392 put_atom a(2) definition_module 12393 put_global_variable a(3) y(5) 12394 move y(2) a(1) y(3) a(4) 12395 callf get_flag_body / 4 Y[2,3,4,5] 12396 put_global_variable a(3) y(1) 12397 move y(2) a(1) y(5) a(2) 12398 callf get_deprecation_advice / 3 Y[1,2,3,4] 12399 cut y(4) 3 12400 put_integer a(1) 75 12401 move 2 y(2) a(2) 12402 callf warning_handler / 3 Y[1] 12403 put_list a(3) 12404 push_value y(1) 12405 push_nil 12406 put_atom a(1) warning_output 12407 put_string a(2) " Advice: %w%n" 12408 put_module a(4) eclipse 12409 chain sepia_kernel : printf_body / 4 12410label(11): 12411 get_integer a(1) 85 12412 get_structure a(2) (:) / 2 ref(12) 12413 write_variable a(1) 12414 write_void 12415 branch ref(13) 12416label(12): 12417 read_variable a(1) 12418label(13): 12419 get_variable 1 a(4) y(1) 12420 callf known_library / 1 Y[1] 12421 cut y(1) 0 12422 exit 12423label(15): 12424 jmp warning_handler / 3 12425label(17): 12426 try 0 4 ref(9) 12427 retry 0 ref(11) 12428 trust 0 ref(15) 12429 12430------ Test bug(8) ------- 12431attach_suspensions(postponed, A) ?- 12432 !, 12433 postpone_suspensions(A). 12434attach_suspensions(A, B) :- 12435 atom(A), 12436 !, 12437 attach_suspensions1(A, B). 12438attach_suspensions(A, B) :- 12439 nonvar(A), 12440 !, 12441 error(5, attach_suspensions(A, B)). 12442attach_suspensions(A, B) :- 12443 error(4, attach_suspensions(A, B)). 12444 12445INDEXES for (semidet) disjunction [2] 124461. Quality 0.8 12447 [] - [4] 12448 [handle] - [3] 12449 [list] - [3] 12450 [[]] - [2] 12451 [structure] - [3] 12452 [atom] - [2] 12453 [atom, postponed] - [1] 12454 [rational] - [3] 12455 [integer] - [3] 12456 [breal] - [3] 12457 [bignum] - [3] 12458 [string] - [3] 12459 [double] - [3] 12460 [goal] - [3] 12461Branch determinisms for disjunction [2] 12462 Branch 1: det 12463 Branch 2: det 12464 Branch 3: det 12465 Branch 4: det 12466attach_suspensions / 2: 12467label(1): 12468 switch_on_type a(1) 12469 meta: ref(9) 12470 []: ref(12) 12471 atom: ref(11) 12472 bignum: ref(13) 12473 breal: ref(13) 12474 double: ref(13) 12475 goal: ref(13) 12476 handle: ref(13) 12477 integer: ref(13) 12478 list: ref(13) 12479 rational: ref(13) 12480 string: ref(13) 12481 structure: ref(13) 12482 12483label(9): 12484 move a(2) a(4) 12485 put_structure a(2) attach_suspensions / 2 12486 push_value a(1) 12487 push_value a(4) 12488 put_integer a(1) 4 12489 put_module a(3) eclipse 12490 jmp sepia_kernel : error_ / 3 12491label(3): 12492 in_get_atom a(1) postponed 12493label(14): 12494 move a(2) a(1) 12495 jmp postpone_suspensions / 1 12496label(5): 12497 bi_atom a(1) 12498label(12): 12499 jmp attach_suspensions1 / 2 12500label(7): 12501 bi_nonvar a(1) 12502label(13): 12503 move a(2) a(4) 12504 put_structure a(2) attach_suspensions / 2 12505 push_value a(1) 12506 push_value a(4) 12507 put_integer a(1) 5 12508 put_module a(3) eclipse 12509 jmp sepia_kernel : error_ / 3 12510label(11): 12511 atom_switch a(1) 12512 postponed: ref(14) 12513 default: ref(5) 12514 12515 12516------ Test bug(9) ------- 12517execute(A, B, C) :- 12518 ( 12519 [A|B] = C 12520 ; 12521 C = [] 12522 ). 12523 12524INDEXES for (nondet) disjunction [2] 125251. Quality 1.3 12526 [] - [] 12527 [[]] - [2] 12528 [list] - [1] 12529 [var] - [1, 2] 12530Branch determinisms for disjunction [2] 12531 Branch 1: try 12532 Branch 2: trust 12533execute / 3: 12534label(1): 12535 list_switch a(3) ref(4) ref(8) ref(fail) 12536label(2): 12537 try_me_else 0 3 ref(5) 12538label(3): 12539 get_list a(3) ref(4) 12540 write_value a(1) 12541 write_value a(2) 12542 ret 12543label(4): 12544 read_value a(1) 12545 read_value a(2) 12546 ret 12547label(5): 12548 trust_me 0 12549label(6): 12550 get_nil a(3) 12551label(8): 12552 ret 12553 12554------ Test bug(10) ------- 12555do_x(0, [], A, A). 12556do_x(A, B, C, D) :- 12557 C is E + 1, 12558 F is A >> 1, 12559 ( 12560 A /\ 1 =:= 0 12561 -> 12562 B = G 12563 ; 12564 B = [E|G] 12565 ), 12566 do_x(F, G, C, D). 12567 12568INDEXES for (nondet) disjunction [2] 125691. Quality 1.5 12570 [] - [2] 12571 [var] - [1, 2] 12572 [integer] - [2] 12573 [integer, 0] - [1, 2] 125742. Quality 1.5 12575 [] - [2] 12576 [[]] - [1, 2] 12577 [var] - [1, 2] 12578Branch determinisms for disjunction [2] 12579 Branch 1: try 12580 Branch 2: trust 12581INDEXES for (nondet) disjunction [2, 2, 3] 125821. Quality 1.5 12583 [] - [1] 12584 [list] - [1, 2] 12585 [var] - [1, 2] 12586Branch determinisms for disjunction [2, 2, 3] 12587 Branch 1: try 12588 Branch 2: trust 12589do_x / 4: 12590label(1): 12591 integer_switch a(1) 12592 0: ref(3) 12593 default: ref(7) 12594 12595label(3): 12596 list_switch a(2) ref(7) ref(4) ref(7) 12597label(4): 12598 try_me_else 0 4 ref(6) 12599label(5): 12600 get_integer a(1) 0 12601 get_nil a(2) 12602 get_value a(4) a(3) 12603 ret 12604label(6): 12605 trust_me 0 12606label(7): 12607 allocate 7 12608 put_global_variable a(5) y(7) 12609 bi_addi a(5) 1 a(5) 24 12610 get_value a(5) a(3) 12611 move 2 a(1) y(5) 12612 move 2 a(3) y(2) 12613 put_integer a(2) 1 12614 put_global_variable_callf a(3) y(4) sepia_kernel : (>>) / 3 Y[2,3,4,5,6,7] 12615 savecut a(1) 12616 list_switch y(6) ref(8) ref(9) ref(9) 12617label(8): 12618 try_me_else 0 1 ref(10) 12619label(9): 12620 put_integer a(2) 1 12621 move y(5) a(3) 12622 bi_and a(3) a(2) a(2) 16 12623 put_integer a(3) 0 12624 bi_eq a(2) a(3) eclipse 48 12625 cut a(1) 6 12626 move y(6) y(1) 12627 branch ref(13) 12628label(10): 12629 trust_me_inline 0 Y[2,3,4,6,7] 12630label(11): 12631 move y(6) a(1) 12632 get_list a(1) ref(12) 12633 write_value y(7) 12634 write_variable y(1) 12635 branch ref(13) 12636label(12): 12637 read_value y(7) 12638 read_variable y(1) 12639label(13): 12640 move y(4) a(1) 12641 move 3 y(1) a(2) 12642 chain ref(1) 12643 12644------ Test bug(11) ------- 12645add_incoming(A, B, C, D) :- 12646 arg(A, C, E), 12647 ( 12648 var(E) 12649 -> 12650 arg(A, B, E), 12651 do__N(E, D, B, C, D) 12652 ; 12653 true 12654 ). 12655 12656INDEXES for (semidet) disjunction [2] 126571. Quality 1.0 12658 [] - [2] 12659 [var] - [1] 12660Branch determinisms for disjunction [2] 12661 Branch 1: det 12662 Branch 2: det 12663add_incoming / 4: 12664label(1): 12665 bi_arg a(1) a(3) a(5) 16 12666 switch_on_type a(5) 12667 meta: ref(6) 12668 []: ref(5) 12669 atom: ref(5) 12670 bignum: ref(5) 12671 breal: ref(5) 12672 double: ref(5) 12673 goal: ref(5) 12674 handle: ref(5) 12675 integer: ref(5) 12676 list: ref(5) 12677 rational: ref(5) 12678 string: ref(5) 12679 structure: ref(5) 12680 12681 branch ref(6) 12682label(3): 12683 bi_var a(5) 12684label(6): 12685 bi_arg a(1) a(2) a(6) 16 12686 get_value a(6) a(5) 12687 move a(5) a(1) 12688 rot a(3) a(2) a(4) 12689 move a(2) a(5) 12690 jmp do__N / 5 12691label(5): 12692 ret 12693 12694------ Test bug(12) ------- 12695i_np_head0(np_head(A), B - C, B - C, void). 12696i_np_head0(name(A), B - A, B - A, id). 12697i_np_head0(wh(A), A, A, id). 12698 12699INDEXES for (nondet) disjunction [2] 127001. Quality 1.5 12701 [] - [] 12702 [structure] - [] 12703 [structure, name / 1] - [2] 12704 [structure, wh / 1] - [3] 12705 [structure, np_head / 1] - [1] 12706 [var] - [1, 2, 3] 127072. Quality 2.0 12708 [] - [3] 12709 [structure] - [3] 12710 [structure, - / 2] - [1, 2, 3] 12711 [var] - [1, 2, 3] 127123. Quality 2.0 12713 [] - [3] 12714 [structure] - [3] 12715 [structure, - / 2] - [1, 2, 3] 12716 [var] - [1, 2, 3] 127174. Quality 2.0 12718 [] - [] 12719 [atom] - [] 12720 [atom, id] - [2, 3] 12721 [atom, void] - [1] 12722 [var] - [1, 2, 3] 12723Branch determinisms for disjunction [2] 12724 Branch 1: try 12725 Branch 2: retry 12726 Branch 3: trust 12727i_np_head0 / 4: 12728label(1): 12729 functor_switch a(1) 12730 name / 1: ref(15) 12731 wh / 1: ref(23) 12732 np_head / 1: ref(8) 12733 default: ref(fail) 12734 12735 functor_switch a(2) 12736 (-) / 2: ref(4) 12737 default: ref(22) 12738 12739label(4): 12740 functor_switch a(3) 12741 (-) / 2: ref(5) 12742 default: ref(22) 12743 12744 atom_switch a(4) 12745 id: ref(26) 12746 void: ref(7) 12747 default: ref(fail) 12748 12749label(6): 12750 try_me_else 0 4 ref(13) 12751label(7): 12752 get_structure a(1) np_head / 1 ref(8) 12753 write_void 12754label(8): 12755 get_structure a(2) (-) / 2 ref(9) 12756 write_variable2 a(1) a(2) 12757 branch ref(10) 12758label(9): 12759 read_variable2 a(1) a(2) 12760label(10): 12761 get_structure a(3) (-) / 2 ref(11) 12762 write_value a(1) 12763 write_value a(2) 12764 get_atom a(4) void 12765 ret 12766label(11): 12767 read_value a(1) 12768 read_value a(2) 12769 get_atom a(4) void 12770 ret 12771label(13): 12772 retry_me_else 0 ref(21) 12773label(14): 12774 get_structure a(1) name / 1 ref(15) 12775 write_variable a(1) 12776 branch ref(16) 12777label(15): 12778 read_variable a(1) 12779label(16): 12780 get_structure a(2) (-) / 2 ref(17) 12781 write_variable a(2) 12782 write_value a(1) 12783 branch ref(18) 12784label(17): 12785 read_variable a(2) 12786 read_value a(1) 12787label(18): 12788 get_structure a(3) (-) / 2 ref(19) 12789 write_value a(2) 12790 write_value a(1) 12791 get_atom a(4) id 12792 ret 12793label(19): 12794 read_value a(2) 12795 read_value a(1) 12796 get_atom a(4) id 12797 ret 12798label(21): 12799 trust_me 0 12800label(22): 12801 get_structure a(1) wh / 1 ref(23) 12802 write_value a(2) 12803 get_value a(3) a(2) 12804 get_atom a(4) id 12805 ret 12806label(23): 12807 read_value a(2) 12808 get_value a(3) a(2) 12809 get_atom a(4) id 12810 ret 12811label(26): 12812 try 0 4 ref(14) 12813 trust 0 ref(22) 12814label(5): 12815 atom_switch a(4) 12816 id: ref(26) 12817 void: ref(7) 12818 default: ref(fail) 12819 12820 branch ref(6) 12821 12822------ Test bugzilla(68) ------- 12823xgt0(pinf) :- 12824 !. 12825xgt0(A) :- 12826 integer(A), 12827 A > 0. 12828 12829INDEXES for (semidet) disjunction [2] 128301. Quality 1.0 12831 [] - [] 12832 [atom] - [] 12833 [atom, pinf] - [1] 12834 [var] - [1] 12835 [integer] - [2] 12836 [bignum] - [2] 12837Branch determinisms for disjunction [2] 12838 Branch 1: det 12839 Branch 2: det 12840xgt0 / 1: 12841label(1): 12842 switch_on_type a(1) 12843 meta: ref(3) 12844 []: ref(fail) 12845 atom: ref(3) 12846 bignum: ref(7) 12847 breal: ref(fail) 12848 double: ref(fail) 12849 goal: ref(fail) 12850 handle: ref(fail) 12851 integer: ref(7) 12852 list: ref(fail) 12853 rational: ref(fail) 12854 string: ref(fail) 12855 structure: ref(fail) 12856 12857label(3): 12858 get_atom a(1) pinf 12859 ret 12860label(5): 12861 bi_integer a(1) 12862label(7): 12863 put_integer a(2) 0 12864 bi_gt a(1) a(2) eclipse 48 12865 ret 12866 12867------ Test bugzilla(165) ------- 12868compute_stop(A) :- 12869 var(A), 12870 !, 12871 writeln(var). 12872compute_stop(1) :- 12873 !, 12874 writeln(1). 12875compute_stop(-1) :- 12876 !, 12877 writeln(-1). 12878compute_stop(A) :- 12879 integer(A), 12880 A > 1, 12881 !, 12882 writeln(pos). 12883compute_stop(A) :- 12884 integer(A), 12885 A < 0, 12886 !, 12887 writeln(neg). 12888compute_stop(A) :- 12889 writeln(other). 12890 12891INDEXES for (nondet) disjunction [2] 128921. Quality 1.4 12893 [] - [6] 12894 [var] - [1] 12895 [bignum] - [4, 5, 6] 12896 [integer] - [4, 5, 6] 12897 [integer, 1] - [2] 12898 [integer, -1] - [3] 12899Branch determinisms for disjunction [2] 12900 Branch 1: det 12901 Branch 2: det 12902 Branch 3: det 12903 Branch 4: try 12904 Branch 5: retry 12905 Branch 6: trust 12906compute_stop / 1: 12907label(1): 12908 savecut a(2) 12909 switch_on_type a(1) 12910 meta: ref(17) 12911 []: ref(13) 12912 atom: ref(13) 12913 bignum: ref(15) 12914 breal: ref(13) 12915 double: ref(13) 12916 goal: ref(13) 12917 handle: ref(13) 12918 integer: ref(16) 12919 list: ref(13) 12920 rational: ref(13) 12921 string: ref(13) 12922 structure: ref(13) 12923 12924 branch ref(17) 12925label(3): 12926 bi_var a(1) 12927label(17): 12928 put_atom a(1) var 12929 put_module a(2) eclipse 12930 jmp sepia_kernel : writeln_body / 2 12931label(5): 12932 get_integer a(1) 1 12933label(18): 12934 put_integer a(1) 1 12935 put_module a(2) eclipse 12936 jmp sepia_kernel : writeln_body / 2 12937label(7): 12938 get_integer a(1) -1 12939label(19): 12940 put_integer a(1) -1 12941 put_module a(2) eclipse 12942 jmp sepia_kernel : writeln_body / 2 12943label(9): 12944 bi_integer a(1) 12945 put_integer a(3) 1 12946 bi_gt a(1) a(3) eclipse 48 12947 cut a(2) 12948 put_atom a(1) pos 12949 put_module a(2) eclipse 12950 jmp sepia_kernel : writeln_body / 2 12951label(11): 12952 bi_integer a(1) 12953 put_integer a(3) 0 12954 bi_lt a(1) a(3) eclipse 48 12955 cut a(2) 12956 put_atom a(1) neg 12957 put_module a(2) eclipse 12958 jmp sepia_kernel : writeln_body / 2 12959label(13): 12960 put_atom a(1) other 12961 put_module a(2) eclipse 12962 jmp sepia_kernel : writeln_body / 2 12963label(15): 12964 try 0 2 ref(9) 12965 retry 0 ref(11) 12966 trust 0 ref(13) 12967label(16): 12968 integer_switch a(1) 12969 1: ref(18) 12970 -1: ref(19) 12971 default: ref(15) 12972 12973 12974------ Test bugzilla(408) ------- 12975dan :- 12976 A = B, 12977 A = 2, 12978 write(B). 12979b :- 12980 a, 12981 A = 2, 12982 B = 3, 12983 writeln(A), 12984 c(B). 12985 12986dan / 0: 12987label(1): 12988 put_variable a(3) 12989 move a(3) a(1) 12990 get_integer a(3) 2 12991 put_module a(2) eclipse 12992 jmp sepia_kernel : write_ / 2 12993b / 0: 12994label(1): 12995 allocate 1 12996 callf a / 0 Y[] 12997 put_integer a(1) 2 12998 put_integer a(3) 3 12999 move a(3) y(1) 13000 put_module a(2) eclipse 13001 callf sepia_kernel : writeln_body / 2 Y[1] 13002 move_chain y(1) a(1) c / 1 13003 13004------ Test bugzilla(642) ------- 13005q(A, B) :- 13006 equal([A], [C]), 13007 ( 13008 C = b, 13009 B = 1 13010 -> 13011 then 13012 ; 13013 else 13014 ). 13015 13016INDEXES for (nondet) disjunction [3] 130171. Quality 1.5 13018 [] - [2] 13019 [var] - [1, 2] 13020 [integer] - [2] 13021 [integer, 1] - [1, 2] 130222. Quality 1.5 13023 [] - [2] 13024 [atom] - [2] 13025 [atom, b] - [1, 2] 13026 [var] - [1, 2] 13027Branch determinisms for disjunction [3] 13028 Branch 1: try 13029 Branch 2: trust 13030q / 2: 13031label(1): 13032 get_variable 2 a(2) y(1) 13033 move a(1) a(3) 13034 put_list a(1) 13035 push_value a(3) 13036 push_nil 13037 put_list a(2) 13038 push_variable y(2) 13039 push_nil 13040 callf equal / 2 Y[1,2] 13041 savecut a(1) 13042 integer_switch y(1) 13043 1: ref(3) 13044 default: ref(7) 13045 13046label(3): 13047 atom_switch y(2) 13048 b: ref(4) 13049 default: ref(7) 13050 13051label(4): 13052 try_me_else 0 1 ref(6) 13053label(5): 13054 move y(2) a(2) 13055 get_atom a(2) b 13056 move y(1) a(2) 13057 get_integer a(2) 1 13058 cut a(1) 0 13059 chain (then) / 0 13060label(6): 13061 trust_me_inline 0 Y[] 13062label(7): 13063 chain (else) / 0 13064 13065------ Test bugzilla(727) ------- 13066p1 :- 13067 A = f(B), 13068 t, 13069 writeln(B). 13070p2 :- 13071 A = f(B), 13072 writeln(B). 13073 13074p1 / 0: 13075label(1): 13076 allocate 1 13077 put_global_variable y(1) 13078 callf t / 0 Y[1] 13079 put_module a(2) eclipse 13080 move_chain y(1) a(1) sepia_kernel : writeln_body / 2 13081p2 / 0: 13082label(1): 13083 put_variable a(1) 13084 put_module a(2) eclipse 13085 jmp sepia_kernel : writeln_body / 2 13086 13087------ Test bugzilla(774) ------- 13088p1 :- 13089 ( 13090 A = A 13091 ; 13092 true 13093 ), 13094 writeln(A). 13095 13096p1 / 0: 13097label(1): 13098 try_me_else 0 0 ref(3) 13099label(2): 13100 allocate 1 13101 put_global_variable y(1) 13102label(5): 13103 put_module a(2) eclipse 13104 move_chain y(1) a(1) sepia_kernel : writeln_body / 2 13105label(3): 13106 trust_me 0 13107label(4): 13108 allocate 1 13109 gc_test 1 13110 put_global_variable y(1) 13111 branch ref(5) 13112 13113------ Test at1 ------- 13114at1 :- 13115 var(f(A)), 13116 A == a, 13117 q(A, f(A)). 13118 13119at1 / 0: 13120label(1): 13121 put_structure a(3) f / 1 13122 push_variable a(1) 13123 bi_var a(3) 13124 in_get_atom a(1) a 13125 put_structure a(2) f / 1 13126 push_value a(1) 13127 jmp q / 2 13128 13129------ Test at2 ------- 13130at2 :- 13131 f(A) == f(B), 13132 A == B, 13133 q(A, B). 13134 13135at2 / 0: 13136label(1): 13137 put_structure a(3) f / 1 13138 push_variable a(1) 13139 put_structure a(4) f / 1 13140 push_variable a(2) 13141 get_matched_value a(3) a(4) 13142 get_matched_value a(1) a(2) 13143 jmp q / 2 13144 13145------ Test at3 ------- 13146at3 :- 13147 f(A) == f(B), 13148 A == B, 13149 q(f(A), f(B)). 13150 13151at3 / 0: 13152label(1): 13153 put_structure a(3) f / 1 13154 push_variable a(4) 13155 put_structure a(5) f / 1 13156 push_variable a(6) 13157 get_matched_value a(3) a(5) 13158 get_matched_value a(4) a(6) 13159 put_structure a(1) f / 1 13160 push_value a(4) 13161 put_structure a(2) f / 1 13162 push_value a(6) 13163 jmp q / 2 13164 13165------ Test at4 ------- 13166at4 :- 13167 q, 13168 f(A) == f(B), 13169 A == B, 13170 q(A, B). 13171 13172at4 / 0: 13173label(1): 13174 allocate 0 13175 callf q / 0 Y[] 13176 put_structure a(3) f / 1 13177 push_variable a(1) 13178 put_structure a(4) f / 1 13179 push_variable a(2) 13180 get_matched_value a(3) a(4) 13181 get_matched_value a(1) a(2) 13182 chain q / 2 13183 13184------ Test ag1 ------- 13185ag1 :- 13186 *(f(A), f(A), f(A)). 13187 13188ag1 / 0: 13189label(1): 13190 put_structure a(1) f / 1 13191 push_variable a(2) 13192 put_structure a(3) f / 1 13193 push_value a(2) 13194 bi_mul a(1) a(3) a(1) 16 13195 get_structure a(1) f / 1 ref(2) 13196 write_value a(2) 13197 ret 13198label(2): 13199 read_value a(2) 13200 ret 13201 13202------ Test ag2 ------- 13203ag2 :- 13204 *(A, A, f(A)). 13205 13206ag2 / 0: 13207label(1): 13208 put_variable a(1) 13209 bi_mul a(1) a(1) a(2) 16 13210 get_structure a(2) f / 1 ref(2) 13211 write_value a(1) 13212 ret 13213label(2): 13214 read_value a(1) 13215 ret 13216 13217------ Test ag3 ------- 13218ag3 :- 13219 A == f(A), 13220 q(A). 13221 13222ag3 / 0: 13223label(1): 13224 put_variable a(1) 13225 put_structure a(2) f / 1 13226 push_value a(1) 13227 get_matched_value a(1) a(2) 13228 jmp q / 1 13229 13230------ Test ag5 ------- 13231ag5 :- 13232 p(f(A), f(A), f(A)). 13233 13234ag5 / 0: 13235label(1): 13236 put_structure a(1) f / 1 13237 push_variable a(4) 13238 put_structure a(2) f / 1 13239 push_value a(4) 13240 put_structure a(3) f / 1 13241 push_value a(4) 13242 jmp p / 3 13243 13244------ Test ag6 ------- 13245ag6 :- 13246 p(A, A, f(A)), 13247 p(f(B), f(B)), 13248 p(C, f(C)), 13249 p(f(D), D). 13250 13251ag6 / 0: 13252label(1): 13253 put_structure a(3) f / 1 13254 push_variable a(1) 13255 allocate 0 13256 move a(1) a(2) 13257 callf p / 3 Y[] 13258 put_structure a(1) f / 1 13259 push_variable a(3) 13260 put_structure a(2) f / 1 13261 push_value a(3) 13262 callf p / 2 Y[] 13263 put_structure a(2) f / 1 13264 push_variable a(1) 13265 callf p / 2 Y[] 13266 put_structure a(1) f / 1 13267 push_variable a(2) 13268 chain p / 2 13269 13270------ Test ag8 ------- 13271ag8 :- 13272 A =.. [f, B, B], 13273 q(A). 13274 13275ag8 / 0: 13276label(1): 13277 put_structure a(1) f / 2 13278 push_variable a(2) 13279 push_value a(2) 13280 jmp q / 1 13281 13282------ Test am1 ------- 13283am1 :- 13284 f(A) == A. 13285 13286am1 / 0: 13287label(1): 13288 put_structure a(1) f / 1 13289 push_variable a(2) 13290 get_matched_value a(1) a(2) 13291 ret 13292 13293------ Test am2 ------- 13294am2 :- 13295 f(A) == A, 13296 q(A). 13297 13298am2 / 0: 13299label(1): 13300 put_structure a(2) f / 1 13301 push_variable a(1) 13302 get_matched_value a(2) a(1) 13303 jmp q / 1 13304 13305------ Test am3 ------- 13306am3 :- 13307 f(A) == A, 13308 q(A), 13309 r. 13310 13311am3 / 0: 13312label(1): 13313 put_structure a(2) f / 1 13314 push_variable a(1) 13315 get_matched_value a(2) a(1) 13316 allocate 0 13317 callf q / 1 Y[] 13318 chain r / 0 13319 13320------ Test am4 ------- 13321am4 :- 13322 *(f(A), A, f(A)). 13323 13324am4 / 0: 13325label(1): 13326 put_structure a(1) f / 1 13327 push_variable a(2) 13328 bi_mul a(1) a(2) a(1) 16 13329 get_structure a(1) f / 1 ref(2) 13330 write_value a(2) 13331 ret 13332label(2): 13333 read_value a(2) 13334 ret 13335 13336------ Test am5 ------- 13337am5 :- 13338 p(A), 13339 *(f(A), A, f(A)), 13340 q(A). 13341 13342am5 / 0: 13343label(1): 13344 allocate 1 13345 put_global_variable_callf a(1) y(1) p / 1 Y[1] 13346 put_structure a(2) f / 1 13347 push_value y(1) 13348 move y(1) a(1) 13349 bi_mul a(2) a(1) a(2) 16 13350 get_structure a(2) f / 1 ref(2) 13351 write_value a(1) 13352 chain q / 1 13353label(2): 13354 read_value a(1) 13355 chain q / 1 13356 13357------ Test am6 ------- 13358am6 :- 13359 var(A), 13360 *(A, f(A), A), 13361 q(A). 13362 13363am6 / 0: 13364label(1): 13365 put_variable a(1) 13366 bi_var a(1) 13367 put_structure a(2) f / 1 13368 push_value a(1) 13369 bi_mul a(1) a(2) a(2) 16 13370 get_value a(2) a(1) 13371 jmp q / 1 13372 13373------ Test am7 ------- 13374am7 :- 13375 p(A), 13376 *(f(A), A, f(A)), 13377 q(A). 13378 13379am7 / 0: 13380label(1): 13381 allocate 1 13382 put_global_variable_callf a(1) y(1) p / 1 Y[1] 13383 put_structure a(2) f / 1 13384 push_value y(1) 13385 move y(1) a(1) 13386 bi_mul a(2) a(1) a(2) 16 13387 get_structure a(2) f / 1 ref(2) 13388 write_value a(1) 13389 chain q / 1 13390label(2): 13391 read_value a(1) 13392 chain q / 1 13393 13394------ Test am8 ------- 13395am8 :- 13396 p(A), 13397 *(A, f(A), A), 13398 q(A). 13399 13400am8 / 0: 13401label(1): 13402 allocate 1 13403 put_global_variable_callf a(1) y(1) p / 1 Y[1] 13404 put_structure a(2) f / 1 13405 push_value y(1) 13406 move y(1) a(1) 13407 bi_mul a(1) a(2) a(2) 16 13408 get_value a(2) a(1) 13409 chain q / 1 13410 13411------ Test am9 ------- 13412am9 :- 13413 var(A), 13414 f(A) == A, 13415 q(A). 13416 13417am9 / 0: 13418label(1): 13419 put_variable a(1) 13420 bi_var a(1) 13421 put_structure a(2) f / 1 13422 push_value a(1) 13423 get_matched_value a(2) a(1) 13424 jmp q / 1 13425 13426------ Test am10 ------- 13427am10 :- 13428 p(A), 13429 var(A), 13430 f(A) == A, 13431 q(A). 13432 13433am10 / 0: 13434label(1): 13435 allocate 1 13436 put_global_variable_callf a(1) y(1) p / 1 Y[1] 13437 move y(1) a(1) 13438 bi_var a(1) 13439 put_structure a(2) f / 1 13440 push_value a(1) 13441 get_matched_value a(2) a(1) 13442 chain q / 1 13443 13444------ Test am11 ------- 13445am11 :- 13446 var(A), 13447 f(A) == A. 13448 13449am11 / 0: 13450label(1): 13451 put_variable a(1) 13452 bi_var a(1) 13453 put_structure a(2) f / 1 13454 push_value a(1) 13455 get_matched_value a(2) a(1) 13456 ret 13457 13458------ Test am12 ------- 13459am12 :- 13460 var(A), 13461 A == f(A). 13462 13463am12 / 0: 13464label(1): 13465 put_variable a(1) 13466 bi_var a(1) 13467 put_structure a(2) f / 1 13468 push_value a(1) 13469 get_matched_value a(1) a(2) 13470 ret 13471 13472------ Test am13 ------- 13473am13 :- 13474 A == f(A). 13475 13476am13 / 0: 13477label(1): 13478 put_variable a(1) 13479 put_structure a(2) f / 1 13480 push_value a(1) 13481 get_matched_value a(1) a(2) 13482 ret 13483 13484------ Test am14 ------- 13485am14 :- 13486 eq(A, B), 13487 f(A) == A. 13488 13489am14 / 0: 13490label(1): 13491 put_variable a(2) 13492 allocate 1 13493 put_global_variable_callf a(1) y(1) eq / 2 Y[1] 13494 put_structure a(1) f / 1 13495 push_value y(1) 13496 move y(1) a(2) 13497 get_matched_value a(1) a(2) 13498 exit 13499 13500------ Test disj1 ------- 13501p :- 13502 ( 13503 var(A) 13504 -> 13505 b 13506 ; 13507 c 13508 ). 13509 13510p / 0: 13511label(1): 13512 savecut a(1) 13513 try_me_else 0 1 ref(3) 13514label(2): 13515 put_variable a(2) 13516 bi_var a(2) 13517 cut a(1) 13518 jmp b / 0 13519label(3): 13520 trust_me 0 13521label(4): 13522 jmp c / 0 13523 13524------ Test disj2 ------- 13525p :- 13526 ( 13527 var(A) 13528 -> 13529 b 13530 ; 13531 ( 13532 var(A) 13533 -> 13534 c 13535 ; 13536 d 13537 ) 13538 ). 13539 13540p / 0: 13541label(1): 13542 savecut a(1) 13543 try_me_else 0 1 ref(3) 13544label(2): 13545 put_variable a(2) 13546 bi_var a(2) 13547 cut a(1) 13548 jmp b / 0 13549label(3): 13550 retry_me_else 0 ref(5) 13551label(4): 13552 put_variable a(2) 13553 bi_var a(2) 13554 cut a(1) 13555 jmp c / 0 13556label(5): 13557 trust_me 0 13558label(6): 13559 jmp d / 0 13560 13561------ Test disj3 ------- 13562p :- 13563 ( 13564 var(A) 13565 -> 13566 var(B) 13567 ; 13568 var(C) 13569 ). 13570 13571p / 0: 13572label(1): 13573 savecut a(1) 13574 try_me_else 0 1 ref(3) 13575label(2): 13576 put_variable a(2) 13577 bi_var a(2) 13578 cut a(1) 13579 put_variable a(1) 13580 bi_var a(1) 13581 ret 13582label(3): 13583 trust_me 0 13584label(4): 13585 put_variable a(1) 13586 bi_var a(1) 13587 ret 13588 13589------ Test disj4 ------- 13590p :- 13591 ( 13592 var(A) 13593 -> 13594 b 13595 ; 13596 c 13597 ), 13598 e, 13599 f. 13600 13601p / 0: 13602label(1): 13603 savecut a(1) 13604 try_me_else 0 1 ref(3) 13605label(2): 13606 put_variable a(2) 13607 bi_var a(2) 13608 cut a(1) 13609 allocate 0 13610 callf b / 0 Y[] 13611 callf e / 0 Y[] 13612 chain f / 0 13613label(3): 13614 trust_me 0 13615label(4): 13616 allocate 0 13617 callf c / 0 Y[] 13618 callf e / 0 Y[] 13619 chain f / 0 13620 13621------ Test disj5 ------- 13622p :- 13623 ( 13624 var(A) 13625 -> 13626 b 13627 ; 13628 ( 13629 var(A) 13630 -> 13631 c 13632 ; 13633 d 13634 ) 13635 ), 13636 e, 13637 f. 13638 13639p / 0: 13640label(1): 13641 savecut a(1) 13642 try_me_else 0 1 ref(3) 13643label(2): 13644 put_variable a(2) 13645 bi_var a(2) 13646 cut a(1) 13647 allocate 0 13648 callf b / 0 Y[] 13649 callf e / 0 Y[] 13650 chain f / 0 13651label(3): 13652 retry_me_else 0 ref(5) 13653label(4): 13654 put_variable a(2) 13655 bi_var a(2) 13656 cut a(1) 13657 allocate 0 13658 callf c / 0 Y[] 13659 callf e / 0 Y[] 13660 chain f / 0 13661label(5): 13662 trust_me 0 13663label(6): 13664 allocate 0 13665 callf d / 0 Y[] 13666 callf e / 0 Y[] 13667 chain f / 0 13668 13669------ Test disj6 ------- 13670p :- 13671 ( 13672 var(A) 13673 -> 13674 var(B) 13675 ; 13676 var(C) 13677 ), 13678 e, 13679 f. 13680 13681p / 0: 13682label(1): 13683 savecut a(1) 13684 try_me_else 0 1 ref(3) 13685label(2): 13686 put_variable a(2) 13687 bi_var a(2) 13688 cut a(1) 13689 put_variable a(1) 13690 bi_var a(1) 13691 allocate 0 13692 callf e / 0 Y[] 13693 chain f / 0 13694label(3): 13695 trust_me 0 13696label(4): 13697 put_variable a(1) 13698 bi_var a(1) 13699 allocate 0 13700 callf e / 0 Y[] 13701 chain f / 0 13702 13703------ Test disj7 ------- 13704p :- 13705 ( 13706 var(A) 13707 ; 13708 var(B) 13709 ), 13710 c, 13711 d. 13712 13713p / 0: 13714label(1): 13715 try_me_else 0 0 ref(3) 13716label(2): 13717 put_variable a(1) 13718 bi_var a(1) 13719 allocate 0 13720 callf c / 0 Y[] 13721 chain d / 0 13722label(3): 13723 trust_me 0 13724label(4): 13725 put_variable a(1) 13726 bi_var a(1) 13727 allocate 0 13728 callf c / 0 Y[] 13729 chain d / 0 13730 13731------ Test disj8 ------- 13732p :- 13733 ( 13734 once t 13735 -> 13736 fail 13737 ; 13738 true 13739 ). 13740 13741p / 0: 13742label(1): 13743 allocate 2 13744 savecut y(1) 13745 try_me_else 0 0 ref(3) 13746label(2): 13747 savecut y(2) 13748 callf t / 0 Y[1,2] 13749 cut y(2) 1 13750 cut y(1) 0 13751 failure 13752label(3): 13753 trust_me_inline 0 Y[] 13754label(4): 13755 exit 13756 13757------ Test disj8a ------- 13758p :- 13759 ( 13760 once true 13761 -> 13762 fail 13763 ; 13764 true 13765 ). 13766 13767p / 0: 13768label(1): 13769 savecut a(1) 13770 try_me_else 0 1 ref(3) 13771label(2): 13772 allocate 2 13773 savecut y(2) 13774 move a(1) y(1) 13775 callf true / 0 Y[1,2] 13776 cut y(2) 1 13777 cut y(1) 0 13778 failure 13779label(3): 13780 trust_me 0 13781label(4): 13782 ret 13783 13784------ Test disj9 ------- 13785p :- 13786 q, 13787 once var(A), 13788 p. 13789 13790p / 0: 13791label(1): 13792 allocate 0 13793 callf q / 0 Y[] 13794 savecut a(1) 13795 put_variable a(2) 13796 bi_var a(2) 13797 cut a(1) 0 13798 chain ref(1) 13799 13800------ Test disj10 ------- 13801p :- 13802 q, 13803 once var(A). 13804 13805p / 0: 13806label(1): 13807 allocate 0 13808 callf q / 0 Y[] 13809 savecut a(1) 13810 put_variable a(2) 13811 bi_var a(2) 13812 cut a(1) 0 13813 exit 13814 13815------ Test disj11 ------- 13816p :- 13817 ( 13818 ( 13819 a, 13820 b 13821 -> 13822 c 13823 ) 13824 -> 13825 q 13826 ). 13827 13828p / 0: 13829label(1): 13830 allocate 2 13831 savecut y(1) 13832 savecut y(2) 13833 callf a / 0 Y[1,2] 13834 callf b / 0 Y[1,2] 13835 cut y(2) 1 13836 callf c / 0 Y[1] 13837 cut y(1) 0 13838 chain q / 0 13839 13840------ Test disj12 ------- 13841p :- 13842 ( 13843 q, 13844 var(A) 13845 -> 13846 true 13847 ). 13848 13849p / 0: 13850label(1): 13851 allocate 1 13852 savecut y(1) 13853 callf q / 0 Y[1] 13854 put_variable a(1) 13855 bi_var a(1) 13856 cut y(1) 0 13857 exit 13858 13859------ Test disj13 ------- 13860p :- 13861 q, 13862 var(A), 13863 !, 13864 p(A). 13865 13866p / 0: 13867label(1): 13868 allocate 1 13869 savecut y(1) 13870 callf q / 0 Y[1] 13871 put_variable a(1) 13872 bi_var a(1) 13873 cut y(1) 0 13874 chain p / 1 13875 13876------ Test disj14 ------- 13877p :- 13878 ( 13879 a 13880 ; 13881 ( 13882 var(A) 13883 -> 13884 var(A) 13885 ) 13886 ), 13887 b. 13888 13889p / 0: 13890label(1): 13891 try_me_else 0 0 ref(3) 13892label(2): 13893 allocate 0 13894 callf a / 0 Y[] 13895 chain b / 0 13896label(3): 13897 trust_me 0 13898label(4): 13899 savecut a(1) 13900 put_variable a(2) 13901 bi_var a(2) 13902 cut a(1) 13903 bi_var a(2) 13904 jmp b / 0 13905 13906------ Test disj15 ------- 13907p :- 13908 ( 13909 var(A) 13910 -> 13911 var(A), 13912 ! 13913 ; 13914 ( 13915 p, 13916 var(A), 13917 ! 13918 ; 13919 var(A), 13920 ! 13921 ) 13922 ). 13923 13924p / 0: 13925label(1): 13926 savecut a(1) 13927 savecut a(2) 13928 try_me_else 0 2 ref(3) 13929label(2): 13930 put_variable a(3) 13931 bi_var a(3) 13932 cut a(2) 13933 bi_var a(3) 13934 cut a(1) 13935 ret 13936label(3): 13937 retry_me_else 0 ref(5) 13938label(4): 13939 get_variable 1 a(1) y(1) 13940 callf ref(1) Y[1] 13941 put_variable a(1) 13942 bi_var a(1) 13943 cut y(1) 0 13944 exit 13945label(5): 13946 trust_me 0 13947label(6): 13948 put_variable a(1) 13949 bi_var a(1) 13950 ret 13951 13952------ Test disj16 ------- 13953p :- 13954 not (p, !, once (a, !, b)). 13955 13956p / 0: 13957label(1): 13958 allocate 3 13959 savecut y(1) 13960 try_me_else 0 0 ref(3) 13961label(2): 13962 savecut y(3) 13963 callf ref(1) Y[1,3] 13964 cut y(3) 2 13965 savecut y(2) 13966 callf a / 0 Y[1,2] 13967 cut y(2) 2 13968 callf b / 0 Y[1,2] 13969 cut y(2) 1 13970 cut y(1) 0 13971 failure 13972label(3): 13973 trust_me_inline 0 Y[] 13974label(4): 13975 exit 13976 13977------ Test disj17 ------- 13978p :- 13979 ( 13980 q(A) 13981 ; 13982 r(B) 13983 ). 13984 13985p / 0: 13986label(1): 13987 try_me_else 0 0 ref(3) 13988label(2): 13989 put_variable a(1) 13990 jmp q / 1 13991label(3): 13992 trust_me 0 13993label(4): 13994 put_variable a(1) 13995 jmp r / 1 13996 13997------ Test disj18 ------- 13998p1(A, B, f(C)) :- 13999 A = B, 14000 A = C, 14001 a = b, 14002 q, 14003 argc(D), 14004 D = a. 14005 14006p1 / 3: 14007label(1): 14008 get_structure a(3) f / 1 ref(2) 14009 write_variable a(3) 14010 branch ref(3) 14011label(2): 14012 read_variable a(3) 14013label(3): 14014 get_value a(1) a(2) 14015 get_value a(1) a(3) 14016 failure 14017 14018------ Test disj19 ------- 14019t :- 14020 not not (!, fail). 14021 14022t / 0: 14023label(1): 14024 allocate 1 14025 savecut y(1) 14026 try_me_else 0 0 ref(6) 14027label(2): 14028 savecut a(1) 14029 try_me_else 0 1 ref(4) 14030label(3): 14031 failure 14032label(4): 14033 trust_me_inline 0 Y[1] 14034label(5): 14035 cut y(1) 0 14036 failure 14037label(6): 14038 trust_me_inline 0 Y[] 14039label(7): 14040 exit 14041 14042------ Test disj20 ------- 14043t :- 14044 ( 14045 tt 14046 -> 14047 not (tt -> fail) 14048 ). 14049 14050t / 0: 14051label(1): 14052 allocate 3 14053 savecut y(3) 14054 callf tt / 0 Y[3] 14055 cut y(3) 2 14056 savecut y(1) 14057 try_me_else 0 0 ref(3) 14058label(2): 14059 savecut y(2) 14060 callf tt / 0 Y[1,2] 14061 cut y(2) 1 14062 failure 14063label(3): 14064 trust_me_inline 0 Y[] 14065label(4): 14066 exit 14067 14068------ Test disj20a ------- 14069t :- 14070 ( 14071 true 14072 -> 14073 not (true -> fail) 14074 ). 14075 14076t / 0: 14077label(1): 14078 allocate 3 14079 savecut y(3) 14080 callf true / 0 Y[3] 14081 cut y(3) 2 14082 savecut a(1) 14083 try_me_else 0 1 ref(3) 14084label(2): 14085 savecut y(2) 14086 move a(1) y(1) 14087 callf true / 0 Y[1,2] 14088 cut y(2) 1 14089 failure 14090label(3): 14091 trust_me_inline 0 Y[] 14092label(4): 14093 exit 14094 14095------ Test disj21 ------- 14096t :- 14097 ( 14098 q, 14099 var(A) 14100 -> 14101 p(A) 14102 ). 14103 14104t / 0: 14105label(1): 14106 allocate 1 14107 savecut y(1) 14108 callf q / 0 Y[1] 14109 put_variable a(1) 14110 bi_var a(1) 14111 cut y(1) 0 14112 chain p / 1 14113 14114------ Test disj22 ------- 14115q(A) :- 14116 ( 14117 p(a) 14118 -> 14119 r(A) 14120 ). 14121 14122q / 1: 14123label(1): 14124 allocate 2 14125 savecut y(2) 14126 move a(1) y(1) 14127 put_atom a(1) a 14128 callf p / 1 Y[1,2] 14129 cut y(2) 1 14130 move_chain y(1) a(1) r / 1 14131 14132------ Test disj23 ------- 14133g(A, B, C) :- 14134 copy_term(B, d(A, C, D)), 14135 once D. 14136 14137g / 3: 14138label(1): 14139 shift a(4) a(1) a(2) 14140 put_structure a(2) d / 3 14141 push_value a(4) 14142 push_value a(3) 14143 allocate 2 14144 push_variable y(2) 14145 callf copy_term / 2 Y[2] 14146 savecut y(1) 14147 put_module a(2) eclipse 14148 move_callf y(2) a(1) sepia_kernel : call_ / 2 Y[1] 14149 cut y(1) 0 14150 exit 14151 14152------ Test disj24 ------- 14153p2([A|B], C, D) :- 14154 l(C, D, E / F), 14155 q(B, C, D). 14156 14157p2 / 3: 14158label(1): 14159 allocate 3 14160 get_list a(1) ref(2) 14161 write_void 14162 write_variable y(3) 14163 branch ref(3) 14164label(2): 14165 read_void 14166 read_variable y(3) 14167label(3): 14168 move 2 a(2) y(1) 14169 put_structure a(3) (/) / 2 14170 push_void 2 14171 move a(2) a(1) 14172 move_callf y(2) a(2) l / 3 Y[1,2,3] 14173 move y(3) a(1) 14174 move 2 y(1) a(2) 14175 chain q / 3 14176 14177------ Test disj25 ------- 14178p(A) :- 14179 ( 14180 ( 14181 A = 1, 14182 ! 14183 ; 14184 A = 2 14185 ), 14186 fail 14187 ; 14188 A = 4 14189 ). 14190 14191INDEXES for (nondet) disjunction [2] 141921. Quality 1.3 14193 [] - [] 14194 [var] - [1, 2] 14195 [integer] - [] 14196 [integer, 4] - [2] 14197 [integer, 1] - [1] 14198 [integer, 2] - [1] 14199Branch determinisms for disjunction [2] 14200 Branch 1: try 14201 Branch 2: trust 14202INDEXES for (semidet) disjunction [2, 1, 2] 142031. Quality 1.0 14204 [] - [] 14205 [var] - [1] 14206 [integer] - [] 14207 [integer, 1] - [1] 14208 [integer, 2] - [2] 14209Branch determinisms for disjunction [2, 1, 2] 14210 Branch 1: det 14211 Branch 2: det 14212p / 1: 14213label(1): 14214 allocate 1 14215 savecut y(1) 14216 integer_switch a(1) 14217 4: ref(13) 14218 1: ref(4) 14219 2: ref(4) 14220 default: ref(fail) 14221 14222label(3): 14223 try_me_else 0 1 ref(10) 14224label(4): 14225 integer_switch a(1) 14226 1: ref(14) 14227 2: ref(15) 14228 default: ref(fail) 14229 14230label(6): 14231 get_integer a(1) 1 14232label(14): 14233 cut y(1) 0 14234 failure 14235label(8): 14236 get_integer a(1) 2 14237label(15): 14238 failure 14239label(10): 14240 trust_me_inline 0 Y[] 14241label(11): 14242 get_integer a(1) 4 14243label(13): 14244 exit 14245 14246------ Test disj26 ------- 14247p(A, B) :- 14248 ( 14249 var(C), 14250 q(C) 14251 -> 14252 r(C) 14253 ; 14254 s(A, B) 14255 ). 14256 14257p / 2: 14258label(1): 14259 allocate 2 14260 savecut y(1) 14261 try_me_else 0 2 ref(3) 14262label(2): 14263 put_global_variable a(1) y(2) 14264 bi_var a(1) 14265 callf q / 1 Y[1,2] 14266 cut y(1) 2 14267 move_chain y(2) a(1) r / 1 14268label(3): 14269 trust_me_inline 0 Y[] 14270label(4): 14271 chain s / 2 14272 14273------ Test disj27 ------- 14274p3(A, B, C) :- 14275 ( 14276 A = '' 14277 -> 14278 D = "", 14279 E = F 14280 ; 14281 D = "a", 14282 E = [A, F] 14283 ). 14284 14285INDEXES for (semidet) disjunction [2] 142861. Quality 1.0 14287 [] - [2] 14288 [atom] - [2] 14289 [atom, ] - [1] 14290 [var] - [1] 14291Branch determinisms for disjunction [2] 14292 Branch 1: det 14293 Branch 2: det 14294p3 / 3: 14295label(1): 14296 atom_switch a(1) 14297 '': ref(6) 14298 default: ref(5) 14299 14300label(3): 14301 get_atom a(1) '' 14302label(6): 14303label(5): 14304 ret 14305 14306------ Test disj28 ------- 14307s :- 14308 ( 14309 A == open 14310 -> 14311 true 14312 ; 14313 ( 14314 A == def 14315 -> 14316 ( 14317 transformed(B) 14318 -> 14319 true 14320 ; 14321 true 14322 ) 14323 ) 14324 ). 14325 14326s / 0: 14327label(1): 14328 savecut a(1) 14329 try_me_else 0 1 ref(3) 14330label(2): 14331 put_variable a(2) 14332 in_get_atom a(2) open 14333 cut a(1) 14334 ret 14335label(3): 14336 trust_me 0 14337label(4): 14338 savecut a(1) 14339 put_variable a(2) 14340 in_get_atom a(2) def 14341 cut a(1) 14342 allocate 1 14343 savecut y(1) 14344 try_me_else 0 0 ref(6) 14345label(5): 14346 put_variable a(1) 14347 callf transformed / 1 Y[1] 14348 cut y(1) 0 14349 exit 14350label(6): 14351 trust_me_inline 0 Y[] 14352label(7): 14353 exit 14354 14355------ Test disj29 ------- 14356test A :- 14357 !, 14358 writeln(clause1), 14359 ( 14360 A = 1 14361 -> 14362 writeln(ok) 14363 ; 14364 writeln(wrong) 14365 ). 14366 14367INDEXES for (semidet) disjunction [3] 143681. Quality 1.0 14369 [] - [2] 14370 [var] - [1] 14371 [integer] - [2] 14372 [integer, 1] - [1] 14373Branch determinisms for disjunction [3] 14374 Branch 1: det 14375 Branch 2: det 14376test / 1: 14377label(1): 14378 savecut a(3) 14379 get_variable 1 a(1) y(1) 14380 put_atom a(1) clause1 14381 put_module a(2) eclipse 14382 callf sepia_kernel : writeln_body / 2 Y[1] 14383 integer_switch y(1) 14384 1: ref(4) 14385 default: ref(6) 14386 14387label(4): 14388 move y(1) a(3) 14389 get_integer a(3) 1 14390 put_atom a(1) ok 14391 put_module a(2) eclipse 14392 chain sepia_kernel : writeln_body / 2 14393label(6): 14394 put_atom a(1) wrong 14395 put_module a(2) eclipse 14396 chain sepia_kernel : writeln_body / 2 14397 14398------ Test disj30 ------- 14399test :- 14400 getcond(A, B), 14401 ( 14402 A 14403 -> 14404 ( 14405 B 14406 -> 14407 true 14408 ) 14409 ). 14410 14411test / 0: 14412label(1): 14413 allocate 4 14414 put_global_variable2 a(1) y(4) a(2) y(3) 14415 callf getcond / 2 Y[3,4] 14416 savecut y(2) 14417 put_module a(2) eclipse 14418 move_callf y(4) a(1) sepia_kernel : call_ / 2 Y[2,3] 14419 cut y(2) 3 14420 savecut y(1) 14421 put_module a(2) eclipse 14422 move_callf y(3) a(1) sepia_kernel : call_ / 2 Y[1] 14423 cut y(1) 0 14424 exit 14425 14426------ Test disj31 ------- 14427go(A) :- 14428 A = [B, C, D], 14429 findall(E, member(E, A), F), 14430 F = [1, 2, 3], 14431 nl, 14432 write('L = '), 14433 write(A). 14434 14435go / 1: 14436label(1): 14437 get_list a(1) ref(4) 14438 write_void 14439 write_list 14440label(2): 14441 write_void 14442 write_list 14443label(3): 14444 write_void 14445 write_nil 14446 branch ref(5) 14447label(4): 14448 read_void 14449 read_last_list ref(2) 14450 read_void 14451 read_last_list ref(3) 14452 read_void 14453 read_nil 14454label(5): 14455 get_variable 2 a(1) y(1) 14456 put_structure a(2) member / 2 14457 push_variable a(1) 14458 push_value y(1) 14459 put_global_variable a(3) y(2) 14460 put_module a(4) eclipse 14461 callf sepia_kernel : findall_body / 4 Y[1,2] 14462 move y(2) a(1) 14463 get_list a(1) ref(8) 14464 write_integer 1 14465 write_list 14466label(6): 14467 write_integer 2 14468 write_list 14469label(7): 14470 write_integer 3 14471 write_nil 14472 branch ref(9) 14473label(8): 14474 read_integer 1 14475 read_last_list ref(6) 14476 read_integer 2 14477 read_last_list ref(7) 14478 read_integer 3 14479 read_nil 14480label(9): 14481 callf nl / 0 Y[1] 14482 put_atom a(1) 'L = ' 14483 put_module a(2) eclipse 14484 callf sepia_kernel : write_ / 2 Y[1] 14485 put_module a(2) eclipse 14486 move_chain y(1) a(1) sepia_kernel : write_ / 2 14487 14488------ Test disj33 ------- 14489c(A, B) :- 14490 ( 14491 A = B 14492 -> 14493 a 14494 ; 14495 b 14496 ), 14497 c. 14498 14499c / 2: 14500label(1): 14501 savecut a(3) 14502 try_me_else 0 3 ref(3) 14503label(2): 14504 get_value a(1) a(2) 14505 cut a(3) 14506 allocate 0 14507 callf a / 0 Y[] 14508 chain c / 0 14509label(3): 14510 trust_me 0 14511label(4): 14512 allocate 0 14513 callf b / 0 Y[] 14514 chain c / 0 14515 14516------ Test disj34 ------- 14517producer(A) :- 14518 random(B), 14519 ( 14520 B > 0 14521 -> 14522 A = [B|C] 14523 ; 14524 A = [zero|C] 14525 ), 14526 producer(C). 14527 14528INDEXES for (nondet) disjunction [3] 145291. Quality 1.5 14530 [] - [1] 14531 [list] - [1, 2] 14532 [var] - [1, 2] 14533Branch determinisms for disjunction [3] 14534 Branch 1: try 14535 Branch 2: trust 14536producer / 1: 14537label(1): 14538 get_variable 3 a(1) y(2) 14539 put_global_variable_callf a(1) y(3) random / 1 Y[2,3] 14540 savecut a(1) 14541 list_switch y(2) ref(2) ref(3) ref(3) 14542label(2): 14543 try_me_else 0 1 ref(5) 14544label(3): 14545 put_integer a(2) 0 14546 move y(3) a(3) 14547 bi_gt a(3) a(2) eclipse 48 14548 cut a(1) 3 14549 move y(2) a(1) 14550 get_list a(1) ref(4) 14551 write_value a(3) 14552 write_variable y(1) 14553 move_chain y(1) a(1) ref(1) 14554label(4): 14555 read_value a(3) 14556 read_variable y(1) 14557 move_chain y(1) a(1) ref(1) 14558label(5): 14559 trust_me_inline 0 Y[2] 14560label(6): 14561 move y(2) a(1) 14562 get_list a(1) ref(7) 14563 write_atom zero 14564 write_variable y(1) 14565 move_chain y(1) a(1) ref(1) 14566label(7): 14567 read_atom zero 14568 read_variable y(1) 14569 move_chain y(1) a(1) ref(1) 14570 14571------ Test disj35 ------- 14572nm(A, [A|B]) :- 14573 true, 14574 !, 14575 fail. 14576nm(A, [B|C]) :- 14577 !, 14578 nm(A, C). 14579nm(A, []). 14580 14581INDEXES for (nondet) disjunction [2] 145821. Quality 1.5 14583 [] - [] 14584 [[]] - [3] 14585 [list] - [1, 2] 14586 [var] - [1, 2] 14587Branch determinisms for disjunction [2] 14588 Branch 1: try 14589 Branch 2: trust 14590 Branch 3: det 14591nm / 2: 14592label(1): 14593 savecut a(3) 14594 list_switch a(2) ref(13) ref(14) ref(fail) 14595label(13): 14596 try 0 3 ref(3) 14597 trust 0 ref(7) 14598label(3): 14599 get_list a(2) ref(4) 14600 write_value a(1) 14601 write_void 14602 branch ref(5) 14603label(4): 14604 read_value a(1) 14605label(5): 14606 get_variable 1 a(3) y(1) 14607 callf true / 0 Y[1] 14608 cut y(1) 0 14609 failure 14610label(7): 14611 get_list a(2) ref(8) 14612 write_void 14613 write_variable a(2) 14614 jmp ref(1) 14615label(8): 14616 read_void 14617 read_variable a(2) 14618 jmp ref(1) 14619label(11): 14620 get_nil a(2) 14621label(14): 14622 ret 14623 14624------ Test disj36 ------- 14625nm(A, [A|B]) :- 14626 !, 14627 fail. 14628nm(A, [B|C]) :- 14629 !, 14630 nm(A, C). 14631nm(A, []). 14632 14633INDEXES for (nondet) disjunction [2] 146341. Quality 1.3 14635 [] - [] 14636 [[]] - [3] 14637 [list] - [1, 2] 14638 [var] - [1] 14639Branch determinisms for disjunction [2] 14640 Branch 1: try 14641 Branch 2: trust 14642 Branch 3: det 14643nm / 2: 14644label(1): 14645 savecut a(3) 14646 list_switch a(2) ref(13) ref(14) ref(fail) 14647label(3): 14648 get_list a(2) ref(4) 14649 write_value a(1) 14650 write_void 14651 cut a(3) 14652 failure 14653label(4): 14654 read_value a(1) 14655 cut a(3) 14656 failure 14657label(7): 14658 get_list a(2) ref(8) 14659 write_void 14660 write_variable a(2) 14661 jmp ref(1) 14662label(8): 14663 read_void 14664 read_variable a(2) 14665 jmp ref(1) 14666label(11): 14667 get_nil a(2) 14668label(14): 14669 ret 14670label(13): 14671 try 0 3 ref(3) 14672 trust 0 ref(7) 14673 14674------ Test alloc(1) ------- 14675p(A) :- 14676 A = foo(2, 3, 4, 5). 14677 14678p / 1: 14679label(1): 14680 get_structure a(1) foo / 4 ref(2) 14681 write_integer2 2 3 14682 write_integer2 4 5 14683 ret 14684label(2): 14685 read_integer 2 14686 read_integer 3 14687 read_integer 4 14688 read_integer 5 14689 ret 14690 14691------ Test alloc(2) ------- 14692p :- 14693 A = foo(2, 3, 4, 5), 14694 q(A). 14695 14696p / 0: 14697label(1): 14698 put_structure a(1) foo / 4 14699 write_integer2 2 3 14700 write_integer2 4 5 14701 jmp q / 1 14702 14703------ Test alloc(3) ------- 14704p :- 14705 A = foo(2, 3), 14706 q(A). 14707p :- 14708 A = foo(2, 3, 4, 5), 14709 r(A). 14710 14711p / 0: 14712label(1): 14713 try_me_else 0 0 ref(3) 14714label(2): 14715 put_structure a(1) foo / 2 14716 write_integer2 2 3 14717 jmp q / 1 14718label(3): 14719 trust_me 0 14720label(4): 14721 put_structure a(1) foo / 4 14722 write_integer2 2 3 14723 write_integer2 4 5 14724 jmp r / 1 14725 14726------ Test alloc(4) ------- 14727p :- 14728 A = foo(2, 3, 4, 5), 14729 r(A). 14730p :- 14731 A = foo(2, 3), 14732 q(A). 14733 14734p / 0: 14735label(1): 14736 try_me_else 0 0 ref(3) 14737label(2): 14738 put_structure a(1) foo / 4 14739 write_integer2 2 3 14740 write_integer2 4 5 14741 jmp r / 1 14742label(3): 14743 trust_me 0 14744label(4): 14745 put_structure a(1) foo / 2 14746 write_integer2 2 3 14747 jmp q / 1 14748 14749------ Test alloc(5) ------- 14750p :- 14751 ( 14752 A = foo(2, 3, 4, 5), 14753 r(A) 14754 ; 14755 A = foo(2, 3), 14756 q(A) 14757 ). 14758 14759p / 0: 14760label(1): 14761 try_me_else 0 0 ref(3) 14762label(2): 14763 put_structure a(1) foo / 4 14764 write_integer2 2 3 14765 write_integer2 4 5 14766 jmp r / 1 14767label(3): 14768 trust_me 0 14769label(4): 14770 put_structure a(1) foo / 2 14771 write_integer2 2 3 14772 jmp q / 1 14773 14774------ Test alloc(6) ------- 14775p(A) :- 14776 A = bar(2), 14777 ( 14778 B = foo(2, 3, 4, 5, 6), 14779 r(B) 14780 ; 14781 B = foo(2, 3), 14782 q(B) 14783 ). 14784 14785p / 1: 14786label(1): 14787 get_structure a(1) bar / 1 ref(2) 14788 write_integer 2 14789 branch ref(3) 14790label(2): 14791 read_integer 2 14792label(3): 14793 try_me_else 0 0 ref(5) 14794label(4): 14795 put_structure a(1) foo / 5 14796 write_integer2 2 3 14797 write_integer2 4 5 14798 push_integer 6 14799 jmp r / 1 14800label(5): 14801 trust_me 0 14802label(6): 14803 put_structure a(1) foo / 2 14804 write_integer2 2 3 14805 jmp q / 1 14806 14807------ Test alloc(7) ------- 14808p(A) :- 14809 ( 14810 A == a, 14811 B = foo(2, 3, 4, 5, 6), 14812 r(B) 14813 ; 14814 ( 14815 A == b, 14816 B = foo(2, 3), 14817 q(B) 14818 ; 14819 A == c, 14820 B == foo(2, 3, 4, 5), 14821 s(B) 14822 ) 14823 ). 14824 14825INDEXES for (semidet) disjunction [2] 148261. Quality 0.8 14827 [] - [] 14828 [atom] - [] 14829 [atom, a] - [1] 14830 [atom, b] - [2] 14831 [atom, c] - [3] 14832Branch determinisms for disjunction [2] 14833 Branch 1: det 14834 Branch 2: det 14835 Branch 3: det 14836p / 1: 14837label(1): 14838 atom_switch a(1) 14839 a: ref(10) 14840 b: ref(11) 14841 c: ref(12) 14842 default: ref(fail) 14843 14844 branch ref(fail) 14845label(4): 14846 in_get_atom a(1) a 14847label(10): 14848 put_structure a(1) foo / 5 14849 write_integer2 2 3 14850 write_integer2 4 5 14851 push_integer 6 14852 jmp r / 1 14853label(6): 14854 in_get_atom a(1) b 14855label(11): 14856 put_structure a(1) foo / 2 14857 write_integer2 2 3 14858 jmp q / 1 14859label(8): 14860 in_get_atom a(1) c 14861label(12): 14862 put_variable a(1) 14863 put_structure a(2) foo / 4 14864 write_integer2 2 3 14865 write_integer2 4 5 14866 get_matched_value a(1) a(2) 14867 jmp s / 1 14868 14869------ Test alloc(8) ------- 14870p(A) :- 14871 ( 14872 A == a, 14873 B = foo(2, 6), 14874 r(B) 14875 ; 14876 ( 14877 A == b, 14878 B = foo(2, 3), 14879 q(B) 14880 ; 14881 A == c, 14882 B == foo(2, 3, 4, 5), 14883 s(B) 14884 ) 14885 ). 14886 14887INDEXES for (semidet) disjunction [2] 148881. Quality 0.8 14889 [] - [] 14890 [atom] - [] 14891 [atom, a] - [1] 14892 [atom, b] - [2] 14893 [atom, c] - [3] 14894Branch determinisms for disjunction [2] 14895 Branch 1: det 14896 Branch 2: det 14897 Branch 3: det 14898p / 1: 14899label(1): 14900 atom_switch a(1) 14901 a: ref(10) 14902 b: ref(11) 14903 c: ref(12) 14904 default: ref(fail) 14905 14906 branch ref(fail) 14907label(4): 14908 in_get_atom a(1) a 14909label(10): 14910 put_structure a(1) foo / 2 14911 write_integer2 2 6 14912 jmp r / 1 14913label(6): 14914 in_get_atom a(1) b 14915label(11): 14916 put_structure a(1) foo / 2 14917 write_integer2 2 3 14918 jmp q / 1 14919label(8): 14920 in_get_atom a(1) c 14921label(12): 14922 put_variable a(1) 14923 put_structure a(2) foo / 4 14924 write_integer2 2 3 14925 write_integer2 4 5 14926 get_matched_value a(1) a(2) 14927 jmp s / 1 14928 14929------ Test alloc(10) ------- 14930p :- 14931 ( 14932 A = foo(2, 3, 4, 5), 14933 r(A, B) 14934 ; 14935 A = foo(2, 3), 14936 q(A) 14937 ), 14938 s(B). 14939 14940p / 0: 14941label(1): 14942 try_me_else 0 0 ref(3) 14943label(2): 14944 put_structure a(1) foo / 4 14945 write_integer2 2 3 14946 write_integer2 4 5 14947 allocate 1 14948 put_global_variable_callf a(2) y(1) r / 2 Y[1] 14949 move_chain y(1) a(1) s / 1 14950label(3): 14951 trust_me 0 14952label(4): 14953 put_structure a(1) foo / 2 14954 write_integer2 2 3 14955 allocate 1 14956 callf q / 1 Y[] 14957 gc_test 1 14958 put_global_variable y(1) 14959 move_chain y(1) a(1) s / 1 14960 14961------ Test alloc(11) ------- 14962p(A, A, foo(2, 3, 4, 5)). 14963 14964p / 3: 14965label(1): 14966 get_value a(2) a(1) 14967 get_structure a(3) foo / 4 ref(2) 14968 write_integer2 2 3 14969 write_integer2 4 5 14970 ret 14971label(2): 14972 read_integer 2 14973 read_integer 3 14974 read_integer 4 14975 read_integer 5 14976 ret 14977 14978------ Test alloc(12) ------- 14979p(bar(A, A), foo(2, 3, 4, 5)). 14980 14981p / 2: 14982label(1): 14983 get_structure a(1) bar / 2 ref(2) 14984 write_variable a(1) 14985 write_value a(1) 14986 branch ref(3) 14987label(2): 14988 read_variable a(1) 14989 read_value a(1) 14990label(3): 14991 get_structure a(2) foo / 4 ref(4) 14992 write_integer2 2 3 14993 write_integer2 4 5 14994 ret 14995label(4): 14996 read_integer 2 14997 read_integer 3 14998 read_integer 4 14999 read_integer 5 15000 ret 15001