Zum Inhalt springen

Chef (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 26. Januar 2007 um 13:55 Uhr durch 80.241.192.17 (Diskussion). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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.