Skip to content

@somenxavi /algorisme_composicio.d
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
algorisme with operator composition *
//D 2.0
//gdmd-4.6 <fitxer>
//Algorisme: implementació dels algorismes genèrics i els seves estructures de dades
//ordenar alfabèticament:
import std.conv, std.stdio, std.stream, std.string;
import std.socket, std.socketstream;
import std.datetime, std.functional, std.math;
class Algorisme(U,V) {
string nom;
uint versio;
alias V function (U) Funcio;
Funcio funcio;
this(string nom, uint versio, Funcio funcio) {
try {
this.nom = nom;
this.versio = versio;
this.funcio = funcio;
}
catch {
writeln("Error");
}
}
string toString() {
return format("%s (versió %s): %s -> %s", nom, versio, typeid(U), typeid(V));
}
//f: T -> U, g: U -> V; g·f = g(f): T -> V. this és g perquè està a l'esquerra
Algorisme!(T,V) opBinary(string op, T)(Algorisme!(T,U) alg) {
if (op=="*") {
//fer la funció composicio
return new Algorisme!(T,V)(this.nom ~ " · " ~ alg.nom, 1, function(T t) { return this.funcio(alg.funcio(t)); } );
}
}
}
alias Algorisme!(int, int) AlgorismeEnters;
void main(string [] args)
{
enum codi = "function(int a) { return 2 * a; }";
auto alg = new AlgorismeEnters("Doblar", 1, mixin(codi));
auto alg2 = new AlgorismeEnters("Triplicar", 1, function (int a) {return 3 * a;});
writeln(alg);
writeln(alg2);
writeln(alg * alg2);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.