packages feed

funcons-simple-0.1.0.3: tests/Kdiverse/Kdiverse5.fct

initialise-binding initialise-storing initialise-giving finalise-failing finalise-throwing scope
  (collateral (bind
    ("readArray",
     allocate-variable (functions
       (tuples ((values)*),
        values))),
  bind
    ("printArray",
     allocate-variable (functions
       (tuples ((values)*),
        values))),
  bind
    ("transArray",
     allocate-variable (functions
       (tuples ((values)*),
        values))),
  bind
    ("mulArray",
     allocate-variable (functions
       (tuples ((values)*),
        values))),
  bind
    ("main",
     allocate-variable (functions
       (tuples ((values)*),
        values)))),
   sequential (assign
     (bound ("readArray"),
      function closure (scope
        (match
          (given,
           tuple (pattern closure (bind
             ("a",
              allocate-initialised-variable
                (values,
                 given))))),
         handle-return (scope
           (bind
             ("m",
              allocate-initialised-variable
                (values,
                 integer-subtract
                   (length (vector-elements (assigned (bound ("a")))),
                    decimal-natural ("1")))),
            scope
              (bind
                ("n",
                 allocate-initialised-variable
                   (values,
                    integer-subtract
                      (length (vector-elements (assigned (checked index
                        (integer-add
                          (1,
                           decimal-natural ("0")),
                         vector-elements (assigned (bound ("a"))))))),
                       decimal-natural ("1")))),
               scope
                 (bind
                   ("i",
                    allocate-initialised-variable
                      (values,
                       decimal-natural ("0"))),
                  while
                    (is-less-or-equal
                      (assigned (bound ("i")),
                       assigned (bound ("m"))),
                     sequential
                       (sequential
                         (print ("Line ",
                         integer-add
                           (assigned (bound ("i")),
                            decimal-natural ("1")),
                         " (",
                         integer-add
                           (assigned (bound ("n")),
                            decimal-natural ("1")),
                         " elements): "),
                          scope
                            (bind
                              ("j",
                               allocate-initialised-variable
                                 (values,
                                  decimal-natural ("0"))),
                             while
                               (is-less-or-equal
                                 (assigned (bound ("j")),
                                  assigned (bound ("n"))),
                                sequential
                                  (effect (give
                                    (read,
                                     sequential
                                       (assign
                                         (checked index
                                           (integer-add
                                             (1,
                                              assigned (bound ("j"))),
                                            vector-elements (assigned (checked index
                                              (integer-add
                                                (1,
                                                 assigned (bound ("i"))),
                                               vector-elements (assigned (bound ("a"))))))),
                                          given),
                                        given))),
                                   effect (give
                                     (bound ("j"),
                                      sequential
                                        (assign
                                          (given,
                                           integer-add
                                             (assigned (given),
                                              1)),
                                         assigned (given)))))))),
                        effect (give
                          (bound ("i"),
                           sequential
                             (assign
                               (given,
                                integer-add
                                  (assigned (given),
                                   1)),
                              assigned (given))))))))))))),
   assign
     (bound ("printArray"),
      function closure (scope
        (match
          (given,
           tuple (pattern closure (bind
             ("a",
              allocate-initialised-variable
                (values,
                 given))))),
         handle-return (scope
           (bind
             ("m",
              allocate-initialised-variable
                (values,
                 integer-subtract
                   (length (vector-elements (assigned (bound ("a")))),
                    decimal-natural ("1")))),
            scope
              (bind
                ("n",
                 allocate-initialised-variable
                   (values,
                    integer-subtract
                      (length (vector-elements (assigned (checked index
                        (integer-add
                          (1,
                           decimal-natural ("0")),
                         vector-elements (assigned (bound ("a"))))))),
                       decimal-natural ("1")))),
               scope
                 (bind
                   ("i",
                    allocate-initialised-variable
                      (values,
                       decimal-natural ("0"))),
                  while
                    (is-less-or-equal
                      (assigned (bound ("i")),
                       assigned (bound ("m"))),
                     sequential
                       (sequential
                         (print ("Line ",
                         integer-add
                           (assigned (bound ("i")),
                            decimal-natural ("1")),
                         " (",
                         integer-add
                           (assigned (bound ("n")),
                            decimal-natural ("1")),
                         " elements):"),
                          scope
                            (bind
                              ("j",
                               allocate-initialised-variable
                                 (values,
                                  decimal-natural ("0"))),
                             while
                               (is-less-or-equal
                                 (assigned (bound ("j")),
                                  assigned (bound ("n"))),
                                sequential
                                  (print (" ",
                                  assigned (checked index
                                    (integer-add
                                      (1,
                                       assigned (bound ("j"))),
                                     vector-elements (assigned (checked index
                                       (integer-add
                                         (1,
                                          assigned (bound ("i"))),
                                        vector-elements (assigned (bound ("a"))))))))),
                                   effect (give
                                     (bound ("j"),
                                      sequential
                                        (assign
                                          (given,
                                           integer-add
                                             (assigned (given),
                                              1)),
                                         assigned (given))))))),
                          print ("\n")),
                        effect (give
                          (bound ("i"),
                           sequential
                             (assign
                               (given,
                                integer-add
                                  (assigned (given),
                                   1)),
                              assigned (given))))))))))))),
   assign
     (bound ("transArray"),
      function closure (scope
        (match
          (given,
           tuple (pattern closure (bind
             ("a",
              allocate-initialised-variable
                (values,
                 given))))),
         handle-return (scope
           (bind
             ("m",
              allocate-initialised-variable
                (values,
                 integer-subtract
                   (length (vector-elements (assigned (bound ("a")))),
                    decimal-natural ("1")))),
            scope
              (bind
                ("n",
                 allocate-initialised-variable
                   (values,
                    integer-subtract
                      (length (vector-elements (assigned (checked index
                        (integer-add
                          (1,
                           decimal-natural ("0")),
                         vector-elements (assigned (bound ("a"))))))),
                       decimal-natural ("1")))),
               scope
                 (bind
                   ("b",
                    allocate-nested-vectors (integer-add
                      (assigned (bound ("n")),
                       decimal-natural ("1")),
                    integer-add
                      (assigned (bound ("m")),
                       decimal-natural ("1")))),
                  sequential
                    (scope
                      (bind
                        ("i",
                         allocate-initialised-variable
                           (values,
                            decimal-natural ("0"))),
                       while
                         (is-less-or-equal
                           (assigned (bound ("i")),
                            assigned (bound ("m"))),
                          sequential
                            (scope
                              (bind
                                ("j",
                                 allocate-initialised-variable
                                   (values,
                                    decimal-natural ("0"))),
                               while
                                 (is-less-or-equal
                                   (assigned (bound ("j")),
                                    assigned (bound ("n"))),
                                  sequential
                                    (effect (give
                                      (assigned (checked index
                                        (integer-add
                                          (1,
                                           assigned (bound ("j"))),
                                         vector-elements (assigned (checked index
                                           (integer-add
                                             (1,
                                              assigned (bound ("i"))),
                                            vector-elements (assigned (bound ("a")))))))),
                                       sequential
                                         (assign
                                           (checked index
                                             (integer-add
                                               (1,
                                                assigned (bound ("i"))),
                                              vector-elements (assigned (checked index
                                                (integer-add
                                                  (1,
                                                   assigned (bound ("j"))),
                                                 vector-elements (assigned (bound ("b"))))))),
                                            given),
                                          given))),
                                     effect (give
                                       (bound ("j"),
                                        sequential
                                          (assign
                                            (given,
                                             integer-add
                                               (assigned (given),
                                                1)),
                                           assigned (given))))))),
                             effect (give
                               (bound ("i"),
                                sequential
                                  (assign
                                    (given,
                                     integer-add
                                       (assigned (given),
                                        1)),
                                   assigned (given))))))),
                     return (assigned (bound ("b"))))))))))),
   assign
     (bound ("mulArray"),
      function closure (scope
        (match
          (given,
           tuple (pattern closure (bind
             ("a",
              allocate-initialised-variable
                (values,
                 given))),
           pattern closure (bind
             ("b",
              allocate-initialised-variable
                (values,
                 given))))),
         handle-return (scope
           (bind
             ("m",
              allocate-initialised-variable
                (values,
                 integer-subtract
                   (length (vector-elements (assigned (bound ("a")))),
                    decimal-natural ("1")))),
            scope
              (bind
                ("n",
                 allocate-initialised-variable
                   (values,
                    integer-subtract
                      (length (vector-elements (assigned (bound ("b")))),
                       decimal-natural ("1")))),
               scope
                 (bind
                   ("p",
                    allocate-initialised-variable
                      (values,
                       integer-subtract
                         (length (vector-elements (assigned (checked index
                           (integer-add
                             (1,
                              decimal-natural ("0")),
                            vector-elements (assigned (bound ("b"))))))),
                          decimal-natural ("1")))),
                  scope
                    (bind
                      ("c",
                       allocate-nested-vectors (integer-add
                         (assigned (bound ("m")),
                          decimal-natural ("1")),
                       integer-add
                         (assigned (bound ("p")),
                          decimal-natural ("1")))),
                     sequential
                       (scope
                         (bind
                           ("i",
                            allocate-initialised-variable
                              (values,
                               decimal-natural ("0"))),
                          while
                            (is-less-or-equal
                              (assigned (bound ("i")),
                               assigned (bound ("m"))),
                             sequential
                               (scope
                                 (bind
                                   ("j",
                                    allocate-initialised-variable
                                      (values,
                                       decimal-natural ("0"))),
                                  while
                                    (is-less-or-equal
                                      (assigned (bound ("j")),
                                       assigned (bound ("p"))),
                                     sequential
                                       (sequential
                                         (effect (give
                                           (decimal-natural ("0"),
                                            sequential
                                              (assign
                                                (checked index
                                                  (integer-add
                                                    (1,
                                                     assigned (bound ("j"))),
                                                   vector-elements (assigned (checked index
                                                     (integer-add
                                                       (1,
                                                        assigned (bound ("i"))),
                                                      vector-elements (assigned (bound ("c"))))))),
                                                 given),
                                               given))),
                                          scope
                                            (bind
                                              ("k",
                                               allocate-initialised-variable
                                                 (values,
                                                  decimal-natural ("0"))),
                                             while
                                               (is-less-or-equal
                                                 (assigned (bound ("k")),
                                                  assigned (bound ("n"))),
                                                sequential
                                                  (effect (give
                                                    (integer-add
                                                      (assigned (checked index
                                                        (integer-add
                                                          (1,
                                                           assigned (bound ("j"))),
                                                         vector-elements (assigned (checked index
                                                           (integer-add
                                                             (1,
                                                              assigned (bound ("i"))),
                                                            vector-elements (assigned (bound ("c")))))))),
                                                       integer-multiply
                                                         (assigned (checked index
                                                           (integer-add
                                                             (1,
                                                              assigned (bound ("k"))),
                                                            vector-elements (assigned (checked index
                                                              (integer-add
                                                                (1,
                                                                 assigned (bound ("i"))),
                                                               vector-elements (assigned (bound ("a")))))))),
                                                          assigned (checked index
                                                            (integer-add
                                                              (1,
                                                               assigned (bound ("j"))),
                                                             vector-elements (assigned (checked index
                                                               (integer-add
                                                                 (1,
                                                                  assigned (bound ("k"))),
                                                                vector-elements (assigned (bound ("b")))))))))),
                                                     sequential
                                                       (assign
                                                         (checked index
                                                           (integer-add
                                                             (1,
                                                              assigned (bound ("j"))),
                                                            vector-elements (assigned (checked index
                                                              (integer-add
                                                                (1,
                                                                 assigned (bound ("i"))),
                                                               vector-elements (assigned (bound ("c"))))))),
                                                          given),
                                                        given))),
                                                   effect (give
                                                     (bound ("k"),
                                                      sequential
                                                        (assign
                                                          (given,
                                                           integer-add
                                                             (assigned (given),
                                                              1)),
                                                         assigned (given)))))))),
                                        effect (give
                                          (bound ("j"),
                                           sequential
                                             (assign
                                               (given,
                                                integer-add
                                                  (assigned (given),
                                                   1)),
                                              assigned (given))))))),
                                effect (give
                                  (bound ("i"),
                                   sequential
                                     (assign
                                       (given,
                                        integer-add
                                          (assigned (given),
                                           1)),
                                      assigned (given))))))),
                        return (assigned (bound ("c")))))))))))),
   assign
     (bound ("main"),
      function closure (scope
        (match
          (given,
           tuple ()),
         handle-return (sequential
           (print ("Input the number of lines and columns (two natural numbers): "),
            scope
              (bind
                ("x",
                 allocate-initialised-variable
                   (values,
                    read)),
               scope
                 (bind
                   ("y",
                    allocate-initialised-variable
                      (values,
                       read)),
                  scope
                    (bind
                      ("a",
                       allocate-nested-vectors (assigned (bound ("x")),
                       assigned (bound ("y")))),
                     sequential
                       (effect (apply
                         (assigned (bound ("readArray")),
                          tuple (assigned (bound ("a"))))),
                        print ("Your matrix is:\n"),
                        effect (apply
                          (assigned (bound ("printArray")),
                           tuple (assigned (bound ("a"))))),
                        print ("The transpose of your matrix is:\n"),
                        effect (apply
                          (assigned (bound ("printArray")),
                           tuple (apply
                             (assigned (bound ("transArray")),
                              tuple (assigned (bound ("a"))))))),
                        print ("You matrix multiplied with its transpose is:\n"),
                        effect (apply
                          (assigned (bound ("printArray")),
                           tuple (apply
                             (assigned (bound ("mulArray")),
                              tuple (assigned (bound ("a")),
                              apply
                                (assigned (bound ("transArray")),
                                 tuple (assigned (bound ("a"))))))))),
                        print ("The transpose of your matrix multiplied with your matrix is:\n"),
                        effect (apply
                          (assigned (bound ("printArray")),
                           tuple (apply
                             (assigned (bound ("mulArray")),
                              tuple (apply
                                (assigned (bound ("transArray")),
                                 tuple (assigned (bound ("a")))),
                              assigned (bound ("a")))))))))))))))),
   apply
     (assigned (bound ("main")),
      tuple ())))