Codesine/implementation

From Esolang
Jump to navigation Jump to search
Back to Codesine

So far I have this running along with html that's just an input box with the ID read and a button to call EVAL(). I'm wondering if I should bother trying to implement named variables, or just go with making people use numbers as variable references.

function program()
{
	this.wavesets = [];
	
	this.add = function(name,f,a) {
		//here I should be able to take a string and convert it to an array index
		//or if not found, create a new index. Thus allowing named wavesets.	
	}

function waveset()
{
	this.waves = [];

	this.add = function(f,a) {
 		f = Math.min(Math.abs(f));
 		while (f >= this.waves.length) {
 			this.waves.push(0);
		}
		this.waves[f] = a;
	};

	this.weval = function(input) {
		//No idea if this is how cosine wave transform works.
		var total = this.waves[0];
		for (var loop = 1; loop < this.waves.length ; loop++) {
			total += (1/loop)/Math.cos(input)*this.waves[loop];
		}
		return total;
	};

	this.waverage = function(total) {
		return total/this.waves.length;
	};
}


 function LineEval(commands) {
 	
  	switch(commands[0]) {
		case "addwave":
			if (commands.length == 3) { Waveset.add(commands[1],commands[2]); } else {
					window.alert("Wrong number of arguments for " + commands[0]);
				}
			break;
		case "print":
			if (commands.length == 2) { window.alert(Waveset.weval(commands[1])); } else {
					window.alert("Wrong number of arguments for " + commands[0]);
				}
			break;
		case "alert":
			for (var loop = 1; loop < commands.length ; loop++) {
				window.alert(commands[loop]);
			}
			break;
		case "nop":
			break;
		default:
			window.alert('Command "'+commands[0]+'" not understood, skipped.');
	}
}
 
function EVAL() {
	//read
	var command = document.getElementById("read").value;
	LineEval(command.split(" "));
}

var Waveset = new waveset();