On Sun, 09 Feb 2003 11:22:58 +0100, Thomas Guettler wrote:
Ich habe am Wochenende mehrere Leute befragt. Sie hielten alle das Pluszeichen für einen algebraischen Ausdruck.
Dann hast du wohl gefragt "Ist + ein algebraischer Ausdruck?" und nicht "Was ist +?" Auf die Idee, die 2. Frage mit "algebraischer Ausdruck" zu antworten, ist bei mir niemand gekommen :-) Aber es geht ja nicht um Meinungsumfragen.
let: let arg [arg ...] Each ARG is an arithmetic expression to be evaluated.
Also könnte man die Hilfe so verstehen:
let arg1 arg2 arg3 arg4
let i = i + 1
dann würde man auch "let + + = = + + +" für gültig halten. Da ein operator (+) aber eben keine expression ist, geht das nicht. Bei "let i = i + 1" genauso. + und = sind keine expressions.
Für Nichtinformatiker:
Bei der Beschreibung von Sprachen haben sich für die Bezeichnung der einzelnen Elemente bestimmte Bezeichnungen eingebürgert. Die tauchen immer wieder in manuals auf. Die Zuweisung per let in der Shellprogrammierung mit ein paar einfachen Rechnungen könnte als sog. "Grammatik" etwa so definieren: (Die rechten Seiten sind zeilenweise als Alternativen zu vestehen) ---------------------------------- statement := let_statement if_then_else_statement while_statement usw.
let_statement := let seperator expression_list
expression_list := expression expression_list seperator expression
expression := simple_expression expression binary_operator expression unary_operator expression assignment
assignment := identifier equal_sign expression
simple_expression := number variable
seperator := SPACE TAB
binary_operator := + - *
unary_operator := ~
equal_sign := =
variable := $ identifier -----------------------------------
[Ein paar Dinge habe ich weggelassen. identifier sei eine Buchstabenfolge, number eine Ziffernfolge. Man müsste einiges umbauen um z.B. die Reihenfolge der Errechnung von "let x=2+4*$a-~55" festzulegen.]
Wenn man nun wissen will, ob eine bestimmte Anweisung erlaubt ist, geht man von "statement" aus und ersetzt "statement" durch eine der rechten Seiten. Hier kommt nur "let_statement" in Frage. Darin ersetzt man dann wieder etwas und darin wieder usw. Irgendwann sollte man zu seiner gewünschten Anweisung kommen. Wenn das nicht geht, war die Anweisung falsch.
Beispiel zur Erzeugung von "let x=2+$a 3+4": (Das pro Schritt zu ersetzende Symbol ist immer mit ^ gekennzeichnet)
statement ^ let_statement ^ let seperator expression_list ^ let SPACE expression_list ^ let SPACE expression_list seperator expression ^ let SPACE expression_list SPACE expression ^ let SPACE expression SPACE expression ^ let SPACE assignment SPACE expression ^ let SPACE identifier equal_sign expression SPACE expression ^ let SPACE identifier = expression SPACE expression ^ let SPACE x = expression SPACE expression ^ let SPACE x = expression binary_operator expression SPACE expression ^ let SPACE x = expression + expression SPACE expression ^ let SPACE x = simple_expression + expression SPACE expression ^ let SPACE x = number + expression SPACE expression ^ let SPACE x = 2 + expression SPACE expression ^ let SPACE x = 2 + simple_expression SPACE expression ^ let SPACE x = 2 + variable SPACE expression ^ let SPACE x = 2 + $ identifier SPACE expression ^ let SPACE x = 2 + $ a SPACE expression
... nun ist nur noch die rechte expression zu "3+4" auflösen. Man erhält dann die vorgegebene Anweisung "let x=1+$a 3+4" als:
let SPACE x = 2 + $ a SPACE 3 + 4
Das Prinzip sollte erkennbar sein. So geht die Shell (oder ein Compiler) vor, wenn sie/er testet, ob die Anweisung gültig ist. "let +++" oder "let i = 1 + 1" sind mit der gegebenen Grammatik nicht zu erzeugen und somit falsch. Ihr könnt das ausprobieren. Es ist also wirklich sehr wichtig, ob + nun ein operator oder eine expression ist.
Mit diesem Prinzip im Hinterkopf sollten sich "man bash" oder "man awk" sehr leicht erschliessen lassen. Alle Sprachen (Programmiersprachen und natürlich Spachen) lassen sich so beschreiben.
Ich denke, dass die Hilfe so geschrieben sein sollte, dass man nicht im Bronnstein nachschlagen muss.
IMO sind Grammatiken und Sprachen das einzige, was die Informatik über die Mathematik hinaus "erschaffen" hat. Im Bronstein steht dazu vermutlich nichts.
Reinhard