Chef (Programmiersprache)
Chef (engl. für Koch oder Chefkoch) ist eine von David Morgan-Mar entwickelte esoterische Programmiersprache. Sie beruht auf der Modifizierung von Daten auf einigen Stacks. Das Konzept ähnelt dem der Programmiersprache „Shakespeare“.
Jedes Programm besteht zumindest aus folgenden Bestandteilen:
- Titel
- Liste von Variablen und ihren Werten
- Liste von Instruktionen zur Modifizierung der Stacks
Die Variablen sind in der Regel nach typischen Zutaten benannt, und die Stacks heißen „mixing bowls“ oder „baking dish“, stellen also Rührschüsseln und Backbleche dar. Die Befehle heißen „mix“ (mischen), „stir“ (rühren) usw. Chef-Programme lesen sich daher wie englischsprachige Kochrezepte.
Syntax und Semantik
Titel
Der Titel des Programms beschreibt kurz was das Programm macht (wie z.B. "Hello World!" Souffle oder Fibonacci Zahlen mit Karamelsoße). Der Titel steht immer in der ersten Zeile des Programms.
Kommentare
Kommentare stehen direkt unter dem Titel und sind optional.
Zutatenliste
Die Zutatenliste wird mit einem Ingredients eingeleitet. Die Zutaten haben immer denselben Aufbau: [ Menge ] [ [ Einheitstyp ] Einheit ] Zutatenname
Bei den Einheitstypen wird wie folgt unterschieden:
* g | kg | pinch(es) trockene Einheiten * ml | l | dash(es) liquide Einheiten * cup(s) | teaspoon(s) | tablespoon(s) trockene oder liquide Einheiten
Der optionale "measure-type" kann entweder "heaped" oder "level" sein. Bei Angabe bedeutet dies automatisch, dass die Zutat trocken ist.
Kochzeit
Die Kochzeit ist optional und wird so angegeben: Cooking time: n(hour(s) | minutes(s))
Ofentemperatur
Manche Rezepte benötigen eine Ofentemperatur. Diese Angabe ist optional und wird so eingegeben: Pre-heat oven to n degrees celsius [(gas mark m)]
Methoden
Die verschiedenen möglichen Methoden wie folgt:
* Take ingredient from refrigerator. liest Wert von STDIN und speichert ihn bei Zutat
* Put ingredient into [nth] mixing bowl. setzt Zutat in n-te mixing-bowl
* Fold ingredient into [nth] mixing bowl. nimmt ersten mixing-bowl - Wert und weist ihn der Zutat zu
* Add ingredient [to [nth] mixing bowl]. addiert Wert der Zutat mit erster Zutat und speichert auf der n-ten mixing-bowl
* Remove ingredient [from [nth] mixing bowl]. subtrahiert Wert der Zutat mit erster Zutat und speichert auf der n-ten mixing-bowl
* Combine ingredient [into [nth] mixing bowl]. multipliziert Wert der Zutat mit erster Zutat und speichert auf der n-ten mixing-bowl
* Divide ingredient [into [nth] mixing bowl]. dividiert Wert der Zutat mit erster Zutat und speichert auf der n-ten mixing-bowl
* Add dry ingredients [to [nth] mixing bowl]. subtrahiert werte aller trockenen Zutaten und speichert Ergebnis in der n-ten mixing-bowl
* Liquefy | Liquify ingredient. ändert Zutat (unicode char) zum Liquid (output purpose) um
* Liquefy | Liquify contents of the [nth] mixing bowl. ändert alle Zutaten (unicode char) der n-ten mixing-bowl zu Liquiden (output purpose) um
* Stir [the [nth] mixing bowl] for number minutes. Schleife wird entsprechend Wert der Zutat durchlaufen
* Stir ingredient into the [nth] mixing bowl. verändert Reihenfolge der ersten n Zutaten der n-ten mixing-bowl
* Mix [the [nth] mixing bowl] well. verändert Reihenfolge aller Zutaten der n-ten mixing-bowl
* Clean [nth] mixing bowl. löscht alle zutaten der n-ten mixing-bowl
* Pour contents of the [nth] mixing bowl into the [pth] baking dish. kopiert alle zutaten der n-ten mixing-bowl in den p-ten baking-dish
* Verb the ingredient. schleifenanfang bis zutatswert = 0
* Verb [the ingredient] until verbed. schleifenende
* Set aside. schleifenabbruch
* Serve with auxiliary-recipe. einfügen eines Zwischenprogramms (souschef)
* Refrigerate [for number hours]. programmpause
Das Programm endet immer mit dem Befehl serves (serviere). Für das Programm bedeutet das, wieviele Werte er je Zutat aus dem baking-dish ausgeben soll.
Beispielprogramm
Das übliche Hello-World-Programm kann folgendermaßen geschrieben werden:
Ingredients. 72 g haricot beans 101 eggs 108 g lard 111 cups oil 32 zucchinis 119 ml water 114 g red salmon 100 g dijon mustard 33 potatoes Method. Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish. Serves 1.
Hierbei wird der Variable haricot beans der ASCII-Wert 72 zugewiesen, welcher das Zeichen H darstellt -
die Variable eggs erhält den Wert 101 (Zeichen: e) und so weiter.
Diese Zeichen werden durch Put aneinandergereiht, so dass Hello world! ausgegeben wird.
Weblinks
- www.dangermouse.net – Offizielle Dokumentation (englisch)
- An interpreter for Chef written in Perl