part##

A function that can be used in Formulas.

### Syntax and semantics

`part##` (`matrix#`, `fromRow`, `toRow`, `fromColumn`, `toColumn`)
compute a subwindow of cells of a matrix.

### Examples

```    assert part## ({{ 7, 4, 9, 3 }, { 1, 4, 3, 22 }, { 0, 8, 6, 5 }},``` ```    ... 2, 3, 1, 3) = {{ 1, 4, 3 }, { 0, 8, 6 }}```

### Examples of error messages

Checks on the number of arguments (always has to be 5):

```    asserterror The function “part##” requires exactly five arguments``` ```    ... (namely a matrix, a starting row, an end row, a starting column, and an end column),``` ```    ... not the 0 given.``` ```    a## = part## ()``` ```    ``` ```    asserterror The function “part##” requires exactly five arguments``` ```    ... (namely a matrix, a starting row, an end row, a starting column, and an end column),``` ```    ... not the 7 given.``` ```    a## = part## (7, 8, 9, 10, 11, "hello", "world")```

Checks on the types of the arguments (always has to be matrix, number, number, number, number):

```    asserterror The first argument of the function “part##” should be``` ```    ... a numeric matrix, not a number.``` ```    a## = part## (2, 4, { 5, 6, 7, 9, 8 }, 66, 99)``` ```    ``` ```    asserterror The first argument of the function “part##” should be``` ```    ... a numeric matrix, not a string.``` ```    a## = part## ("hello", 4, { 5, 6, 7, 9, 8 }, 66, 99)``` ```    ``` ```    asserterror The first argument of the function “part##” should be``` ```    ... a numeric matrix, not a numeric vector.``` ```    a## = part## ({ 5, 6, 7, 9, 8 }, 4, { 5, 6, 7, 9, 8 }, 66, 99)``` ```    ``` ```    m## = {{ 7, 4, 9, 3 }, { 1, 4, 3, 22 }, { 0, 8, 6, 5 }} ; three rows, four columns``` ```    ``` ```    asserterror The second argument of the function “part##” should be``` ```    ... a number (the starting row), not a string.``` ```    a## = part## (m##, "hello", 4, 66, 99)``` ```    ``` ```    asserterror The second argument of the function “part##” should be``` ```    ... a number (the starting row), not a numeric vector.``` ```    a## = part## (m##, { 0 }, 4, 66, 99)``` ```    ``` ```    asserterror The third argument of the function “part##” should be``` ```    ... a number (the end row), not a string.``` ```    a## = part## (m##, 4, "hello", 66, 99)``` ```    ``` ```    asserterror The third argument of the function “part##” should be``` ```    ... a number (the end row), not a numeric vector.``` ```    a## = part## (m##, 4, { 0 }, 66, 99)``` ```    ``` ```    asserterror The fourth argument of the function “part##” should be``` ```    ... a number (the starting column), not a string.``` ```    a## = part## (m##, 66, 99, "hello", 4)``` ```    ``` ```    asserterror The fourth argument of the function “part##” should be``` ```    ... a number (the starting column), not a numeric vector.``` ```    a## = part## (m##, 66, 99, { 0 }, 4)``` ```    ``` ```    asserterror The fifth argument of the function “part##” should be``` ```    ... a number (the end column), not a string.``` ```    a## = part## (m##, 66, 99, 4, "hello")``` ```    ``` ```    asserterror The fifth argument of the function “part##” should be``` ```    ... a number (the end column), not a numeric vector.``` ```    a## = part## (m##, 66, 99, 4, { 0 })```

Finally the checks on the preconditions of the arguments: both row numbers and both column numbers should be within bounds:

```    asserterror The second argument of the function “part##” (the starting row)``` ```    ... should (after rounding) be a positive whole number, not -3.``` ```    a## = part## (m##, -2.98, 0, 66, 99)``` ```    ``` ```    asserterror The second argument of the function “part##” (the starting row)``` ```    ... should (after rounding) be a positive whole number, not 0.``` ```    a## = part## (m##, 0, 0, 66, 99)``` ```    ``` ```    asserterror The second argument of the function “part##” (the starting row)``` ```    ... should (after rounding) be at most the number of rows (3), not 99.``` ```    a## = part## (m##, 99, 0, 66, 99)``` ```    ``` ```    asserterror The second argument of the function “part##” (the starting row)``` ```    ... should (after rounding) be at most the number of rows (3), not 4.``` ```    a## = part## (m##, 3.5, 0, 66, 99)``` ```    ``` ```    asserterror The third argument of the function “part##” (the end row)``` ```    ... should (after rounding) be a positive whole number, not -3.``` ```    a## = part## (m##, 2, -2.98, 66, 99)``` ```    ``` ```    asserterror The third argument of the function “part##” (the end row)``` ```    ... should (after rounding) be a positive whole number, not 0.``` ```    a## = part## (m##, 2, 0, 66, 99)``` ```    ``` ```    asserterror The third argument of the function “part##” (the end row)``` ```    ... should (after rounding) be at most the number of rows (3), not 99.``` ```    a## = part## (m##, 2, 99, 66, 99)``` ```    ``` ```    asserterror The third argument of the function “part##” (the end row)``` ```    ... should (after rounding) be at most the number of rows (3), not 4.``` ```    a## = part## (m##, 2, 3.5, 66, 99)``` ```    ``` ```    asserterror The fourth argument of the function “part##” (the starting column)``` ```    ... should (after rounding) be a positive whole number, not -3.``` ```    a## = part## (m##, 2, 3, -2.98, 0)``` ```    ``` ```    asserterror The fourth argument of the function “part##” (the starting column)``` ```    ... should (after rounding) be a positive whole number, not 0.``` ```    a## = part## (m##, 2, 3, 0, 0)``` ```    ``` ```    asserterror The fourth argument of the function “part##” (the starting column)``` ```    ... should (after rounding) be at most the number of columns (4), not 99.``` ```    a## = part## (m##, 2, 3, 99, 0)``` ```    ``` ```    asserterror The fourth argument of the function “part##” (the starting column)``` ```    ... should (after rounding) be at most the number of columns (4), not 5.``` ```    a## = part## (m##, 2, 3, 4.5, 0)``` ```    ``` ```    asserterror The fifth argument of the function “part##” (the end column)``` ```    ... should (after rounding) be a positive whole number, not -3.``` ```    a## = part## (m##, 2, 3, 1, -2.98)``` ```    ``` ```    asserterror The fifth argument of the function “part##” (the end column)``` ```    ... should (after rounding) be a positive whole number, not 0.``` ```    a## = part## (m##, 2, 3, 1, 0)``` ```    ``` ```    asserterror The fifth argument of the function “part##” (the end column)``` ```    ... should (after rounding) be at most the number of columns (4), not 99.``` ```    a## = part## (m##, 2, 3, 1, 99)``` ```    ``` ```    asserterror The fifth argument of the function “part##” (the end column)``` ```    ... should (after rounding) be at most the number of columns (4), not 5.``` ```    a## = part## (m##, 2, 3, 1, 4.5)```