Matrix implementation in MOTOKO

Best practices for matrix and N dimension array in MOTOKO

For motoko developers…

Hi, I’m Elias Cardona, from ICP Hub Latin America. I’m looking for develop and implement a nDimension matrix (array, vector, etc.) in Motoko language. Of course I’d like to do it taking advantage of the Motoko base library and it good practices.

import Nat "mo:base/Nat";
import Int "mo:base/Int";
import Array "mo:base/Array";
import Debug "mo:base/Debug";

var x : Nat= 3;
var y : Nat = 7;

actor motokosba {

	let sz : Nat = 11;
	func genesis(i : Nat) : Nat { i*1 };

	let capaInicial : [Nat] = Array.tabulate<Nat>(sz, genesis);
	let capa2 : [Nat] = Array.tabulate<Nat>(sz, genesis);
	let capa3 : [Nat] = Array.tabulate<Nat>(sz, 0);


	public func cmat() : () {

		for(i in capaInicial.vals()) {
			var it : Nat = capaInicial[i];

			Debug.print(debug_show(it));

			capa2.append<Nat>(capa2, it);
		};

		for(j in capa2.vals()) {
			var itr : Nat = capa2[j];

			Debug.print(debug_show(itr));

			capa3.append<Nat>(capa3, itr);
		};

	};
	// end of matrix's fill function




	public func rmat() : () {

		for(q in capaInicial.vals()) {
			var fmt1 : Nat = capa3[q][0][0];
			Debug.print(debug_show(fmt1));

			for(r in capa2.vals()) {
				var fmt2 : Nat = capa3[0][r][0];
				Debug.print(debug_show(fmt2));

				for(s in capa3.vals()) {
					var fmt3 : Nat = capa3[0][0][s];
					Debug.print(debug_show(fmt3));

				};
			};
		};

	};
	// end of matrix's printing function


};

I leave you here the motoko playground link, that I mean, could be of support for you:

Hope someone knows which is the best way to take the idea I have in mind: implement an this data structure (‘traditional’ matrix in C/C++) in Motoko.

Regards!

2 Likes