Nutzung der break Anweisung sinnvoll?
-
knivil schrieb:
Also
if
ist ein Schluesselwort in den meisten Sprachen, in Haskell nicht. Patternmatching und Guards ist trotzdem ein anderes Konzept. Man kann damitif
nachbilden, aber mitif
eben nicht auf einfache Weise Patternmatching.Sicher. Man braucht nur eine vordefinierte Funktion match().
Und fertig.Patternmatching, zumindest in ocaml/f# (haskell kenne ich nicht gut genug) ist nichts anderes als ein fancy if. Das soll Patternmatching nicht herabwürdigen - patternmantching ist ein geniales Feature. Aber es ist kein anderes Konzept als if. Nur die Bedingung ist eben fancy statt simples true/false.
-
volkard schrieb:
knivil schrieb:
Bitte, irgendwo muss man aber eine Trennlinie ziehen.
Sprachen mit if: gut
~-------Volkards Trennlinie---------------------~
Sprachen ohne if: böse
simple
~-------knivils Trennlinie---------------------~
fancy
-
@Shade Of Mine: Was soll das? Einen Compiler ohne if schmeisse ich einfach weg. Um einen Nagel in die Wand zu hauen nehme ich üblicherweise einen Hammer. Man kann das natürlich auch mit einer Kneifzange oder einem anderen harten Gegenstand machen. So ähnlich sehe ich das Programmieren auch - die Compilersprachen bieten Werkzeuge, damit ich das nicht aufwendiger in Assembler machen muss.
daddeldu :p
-
knivil schrieb:
Also
if
ist ein Schluesselwort in den meisten Sprachen, in Haskell nicht.Doch,
if
ist ein Schlüsselwort in Haskell. Ich wünschte es wäre eine Funktion, dem ist aber nicht so.if a then b else c
Das ist die Schlüsselwort-if-Syntax von Haskell.
-
berniebutt schrieb:
@Shade Of Mine: Was soll das? Einen Compiler ohne if schmeisse ich einfach weg.
Irgendwas hast du nicht verstanden. Aber keine Ahnung was. Dein Post macht in Bezug auf meinen absolut keinen Sinn...
-
Mr. N schrieb:
knivil schrieb:
Doch,
if
ist ein Schlüsselwort in Haskell. Ich wünschte es wäre eine Funktion, dem ist aber nicht so.Gut, wieder was gelernt. Gibt es irgendwo im Netz was zum Nachlesen, warum sie es in die Sprache aufgenommen haben?
-
Um eben auch innerhalb einer Funktionsdefinition eine Bedingung abzufragen (und nicht dafür wieder eine neue Funktion (mit Patternmatching!) definieren zu müssen).
Aus anderen funktionalen Sprachen (wie Miranda, Gofer, Clean, ...) kenne ich:abs x = x, if x >= 0 -x, otherwise
Mittels Pattern-Matching könnte man kaum diese Funktion einfach definieren...
-
Leute, gcc unterstützt ein tolles Feature: Zeiger auf Sprungmarken! In Verbindung mit gotos sind der Phantasie keine Grenzen gesetzt:
void myfunc(int a, int b) { static void *location[] = { &¬_greater, &&greater }; goto *location[a > b]; not_greater: printf("a <= b\n"); return; greater: printf("a > b\n"); return; }
Man kann also ruhig ohne die ganzen verschachtelten bösesn ifs programmieren
-
knivil schrieb:
Mr. N schrieb:
knivil schrieb:
Doch,
if
ist ein Schlüsselwort in Haskell. Ich wünschte es wäre eine Funktion, dem ist aber nicht so.Gut, wieder was gelernt. Gibt es irgendwo im Netz was zum Nachlesen, warum sie es in die Sprache aufgenommen haben?
Ich weiß es nicht. Haskell 98 ist nun schon ein paar Jahre alt, und vielleicht dachten sie einfach, dass eine Sprache ohne if nicht vollständig wäre oder was weiß ich. Ich fände das als Funktion aber definitiv besser.
-
Ich dachte, ich würde eine Welle der Begeisterung auslösen
gotos mit Zeigern auf Sprungmarken, hip, hip, hurra!
hip, hip, hurra!
hip, hip,
-
abc.w schrieb:
Ich dachte, ich würde eine Welle der Begeisterung auslösen
gotos mit Zeigern auf Sprungmarken, hip, hip, hurra!
hip, hip, hurra!
hip, hip,ich freute mich begrenzt, da ich es schon kannte, hip, hip, hurra!
übers if(0) case ... ; bzw. while(0) case ... ; freute ich mich richtig... hab ich so noch nie gesehen
-
@_--:
Finde ich auch eine gute Idee, Unterstrich als Bezeichner zu nutzen:unsigned int _ = 0; for (_ = 0; _ < N; ++_) buffer[_] = 0;
-
Und natürlich lässt sich mit derselben Methode auch die for-Schleife vermeiden. Das obige Beispiel kann man auch so schreiben:
_ = 0; start: buffer[_] = 0; goto *(++_ < N ? &&start: &&end); end:
Man kann sich austoben damit und wie...
-
der code lässt sich auch rückwärts ausführen
#include <stdio.h> #include <limits.h> int main(){ static void *__[] = {0,0,&&hello,&&w,&&o,&&r,&&l,&&d,&&end},**_ = __+CHAR_BIT; #define _ _-- goto **_; hello: return 0; w: printf("d\n"); goto **_; o: printf("l"); goto **_; r: printf("r"); goto **_; l: printf("o"); goto **_; d: printf("w"); goto **_; end: printf("hello "); goto **_; }