/* * Verrückte Turing-Maschinen — A turing complete game * Copyright (C) 2016 Christian Fraß * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * @author kcf */ type typ_komplex = {art : string; angaben ?: typ_angaben;}; /** * @author kcf */ function fallunterscheidung ( komplex : typ_komplex, faelle : {[art : string] : (angaben ?: any)=>typ_ergebnis}, ersatz : schnittstelle_fehlermonade<(komplex : typ_komplex)=>typ_ergebnis> = (new klasse_nichts<(komplex : typ_komplex)=>typ_ergebnis>()) ) : typ_ergebnis { if (komplex.art in faelle) { let funktion : (angaben ?: any)=>typ_ergebnis = faelle[komplex.art]; let ergebnis : typ_ergebnis = funktion(komplex.angaben); return ergebnis; } else { let meldung : string = ("unbehandelte Art '" + komplex.art + "'"); console.warn(meldung); if (ersatz.ist_schlicht()) { let ergebnis : typ_ergebnis = ersatz.lesen()(komplex); return ergebnis; } else { throw (new Error("unbehandelt")); } } }