How to write a function in SML/NJ which will take 2 matrices as an arguments and it will multiply them
up vote
0
down vote
favorite
I want to write a function in SML/NJ which will take 2 matrices as an arguments and it will multiply them.
I can only use:
function dot, which take 2 vectors and calculate scalar product:
fun dot (xs: int list, ys: int list): int =
List.foldl (fn (x,y) => x+y)
0
(ListPair.map (fn (x,y) => x*y) (xs, ys))
function transpose, which take 1 matrix and calculate transpose of this matrix:
fun transpose (m: 'a list list): 'a list list =
List.tabulate (List.length (List.nth (m, 0)),
fn x => List.map (fn y => (List.nth (y, x))) m)
anonymous function
structures List, ListPair and Math
The function I want to write should be like this:
fun multiply (a: int list list, b: int list list): int list list
So far I have done this:
fun multiply (a: int list list, b: int list list): int list list =
case a of
=>
| g::rep => [(List.map (fn y => dot(g, y)) transpose(b))] @ (multiply(rep, b))
But I got this error:
test.sml:66.21-66.62 Error: operator and operand do not agree [tycon mismatch]
operator domain: int list list
operand: 'Z list list -> 'Z list list
in expression:
(List.map (fn y => dot <exp>)) transpose
I get no errors, if in the last line of function multiply I write b instead of tranpose(b), but of course, if I do this, I don't the the resoult I want:
fun multiply (a: int list list, b: int list list): int list list =
case a of
=>
| g::rep => [(List.map (fn y => dot(g, y)) b)] @ (multiply(rep, b))
I don't know what else should I do. Can anybody pease help me?
sml smlnj
New contributor
add a comment |
up vote
0
down vote
favorite
I want to write a function in SML/NJ which will take 2 matrices as an arguments and it will multiply them.
I can only use:
function dot, which take 2 vectors and calculate scalar product:
fun dot (xs: int list, ys: int list): int =
List.foldl (fn (x,y) => x+y)
0
(ListPair.map (fn (x,y) => x*y) (xs, ys))
function transpose, which take 1 matrix and calculate transpose of this matrix:
fun transpose (m: 'a list list): 'a list list =
List.tabulate (List.length (List.nth (m, 0)),
fn x => List.map (fn y => (List.nth (y, x))) m)
anonymous function
structures List, ListPair and Math
The function I want to write should be like this:
fun multiply (a: int list list, b: int list list): int list list
So far I have done this:
fun multiply (a: int list list, b: int list list): int list list =
case a of
=>
| g::rep => [(List.map (fn y => dot(g, y)) transpose(b))] @ (multiply(rep, b))
But I got this error:
test.sml:66.21-66.62 Error: operator and operand do not agree [tycon mismatch]
operator domain: int list list
operand: 'Z list list -> 'Z list list
in expression:
(List.map (fn y => dot <exp>)) transpose
I get no errors, if in the last line of function multiply I write b instead of tranpose(b), but of course, if I do this, I don't the the resoult I want:
fun multiply (a: int list list, b: int list list): int list list =
case a of
=>
| g::rep => [(List.map (fn y => dot(g, y)) b)] @ (multiply(rep, b))
I don't know what else should I do. Can anybody pease help me?
sml smlnj
New contributor
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I want to write a function in SML/NJ which will take 2 matrices as an arguments and it will multiply them.
I can only use:
function dot, which take 2 vectors and calculate scalar product:
fun dot (xs: int list, ys: int list): int =
List.foldl (fn (x,y) => x+y)
0
(ListPair.map (fn (x,y) => x*y) (xs, ys))
function transpose, which take 1 matrix and calculate transpose of this matrix:
fun transpose (m: 'a list list): 'a list list =
List.tabulate (List.length (List.nth (m, 0)),
fn x => List.map (fn y => (List.nth (y, x))) m)
anonymous function
structures List, ListPair and Math
The function I want to write should be like this:
fun multiply (a: int list list, b: int list list): int list list
So far I have done this:
fun multiply (a: int list list, b: int list list): int list list =
case a of
=>
| g::rep => [(List.map (fn y => dot(g, y)) transpose(b))] @ (multiply(rep, b))
But I got this error:
test.sml:66.21-66.62 Error: operator and operand do not agree [tycon mismatch]
operator domain: int list list
operand: 'Z list list -> 'Z list list
in expression:
(List.map (fn y => dot <exp>)) transpose
I get no errors, if in the last line of function multiply I write b instead of tranpose(b), but of course, if I do this, I don't the the resoult I want:
fun multiply (a: int list list, b: int list list): int list list =
case a of
=>
| g::rep => [(List.map (fn y => dot(g, y)) b)] @ (multiply(rep, b))
I don't know what else should I do. Can anybody pease help me?
sml smlnj
New contributor
I want to write a function in SML/NJ which will take 2 matrices as an arguments and it will multiply them.
I can only use:
function dot, which take 2 vectors and calculate scalar product:
fun dot (xs: int list, ys: int list): int =
List.foldl (fn (x,y) => x+y)
0
(ListPair.map (fn (x,y) => x*y) (xs, ys))
function transpose, which take 1 matrix and calculate transpose of this matrix:
fun transpose (m: 'a list list): 'a list list =
List.tabulate (List.length (List.nth (m, 0)),
fn x => List.map (fn y => (List.nth (y, x))) m)
anonymous function
structures List, ListPair and Math
The function I want to write should be like this:
fun multiply (a: int list list, b: int list list): int list list
So far I have done this:
fun multiply (a: int list list, b: int list list): int list list =
case a of
=>
| g::rep => [(List.map (fn y => dot(g, y)) transpose(b))] @ (multiply(rep, b))
But I got this error:
test.sml:66.21-66.62 Error: operator and operand do not agree [tycon mismatch]
operator domain: int list list
operand: 'Z list list -> 'Z list list
in expression:
(List.map (fn y => dot <exp>)) transpose
I get no errors, if in the last line of function multiply I write b instead of tranpose(b), but of course, if I do this, I don't the the resoult I want:
fun multiply (a: int list list, b: int list list): int list list =
case a of
=>
| g::rep => [(List.map (fn y => dot(g, y)) b)] @ (multiply(rep, b))
I don't know what else should I do. Can anybody pease help me?
sml smlnj
sml smlnj
New contributor
New contributor
edited yesterday
New contributor
asked 2 days ago
Jan
113
113
New contributor
New contributor
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Jan is a new contributor. Be nice, and check out our Code of Conduct.
Jan is a new contributor. Be nice, and check out our Code of Conduct.
Jan is a new contributor. Be nice, and check out our Code of Conduct.
Jan is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53343634%2fhow-to-write-a-function-in-sml-nj-which-will-take-2-matrices-as-an-arguments-and%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown