was ist der ursprung und die bedeutung des ausdrucks "lambda das ultimative"?
<p>ich habe ein paar jahre lang mit funktionalen programmiersprachen herumgespielt und stoße immer wieder auf diesen satz. zum beispiel ist es ein kapitel von "the little schemer", das sicherlich älter ist als der blog mit diesem namen. (nein, das kapitel hilft nicht, meine frage zu beantworten.)</p><p>ich verstehe, was lambda bedeutet, die idee einer anonymen funktion ist sowohl einfach als auch mächtig, aber ich verstehe nicht, was "das ultimative" in diesem zusammenhang bedeutet.</p><p>orte, an denen ich diesen satz gesehen habe:</p><ol> <li>der titel von kapitel 8 von the little schemer</li> <li>ein blog: <a href="http://lambda-the-ultimate.org/">http://lambda-the-ultimate.org/</a> </li> <li>eine reihe von "lambda the ultimate x" -papieren: <a href="http://library.readscheme.org/page1.html">http://library.readscheme.org/page1.html</a> </li> </ol><p>ich habe das gefühl, dass mir hier eine referenz fehlt. kann mir jemand helfen?</p>
<p>ja, es ist einfach eine wiederkehrende phrase im titel mehrerer artikel, beginnend mit einem paar in den 70er jahren, in dem sussman und steele die verwendung der lambda-rechnung für die programmierung anhand eines minimalistischen lisp-dialekts mit dem namen " <a href="http://en.wikipedia.org/wiki/scheme\_%28programming\_language%29">schema" demonstrieren</a> "sie haben für diesen zweck entwickelt. sie finden <a href="http://library.readscheme.org/page1.html">die papiere selbst hier</a> ; sie sind interessant und überraschend relevant.</p><p>ich bin mir nicht sicher, ob dies jemals explizit angegeben wird, aber es ist klar (aus dem kontext, nachdem ich die artikel gelesen habe und den allgemeinen hintergrund und die forschungsinteressen der autoren kenne), dass der satz einfach ein eingängiger slogan für ihre behauptung ist, dass lambda-abstraktionen sind als rechnerisches grundelement nicht nur universell im formalen sinne (in der lage zu sein, ein programm auf irgendeine weise zu codieren, wie umständlich es auch sein mag), sondern universell in einem <em> praktischen </em> spüren, dass jedes in anderen sprachen vorhandene konstrukt, auch solche, die von grund auf eingebrannt wurden, in einer sprache auf lambda-basis auf eine weise implementiert werden kann, die sowohl effektiv als auch natürlich zu verwenden ist.</p><p>der wiederholte satz führt zu der offensichtlichen verallgemeinerten form "für alle x ist lambda das ultimative x", was der sinn ist, den ich allgemein als "lambda the ultimate" als blognamen verstanden habe, wobei ich feststelle, dass sich ltu mit der programmiersprache befasst design und theorie. ironischerweise wäre ltu wahrscheinlich auch einer der besten orte, um jemanden zu finden, der ihnen etwas erzählen könnte, für das lambda <em> nicht </em> die ultimative implementierung ist. :]</p><p>beachten sie auch, dass sussman einer der autoren von <a href="http://mitpress.mit.edu/sicp/"> sicp </a> ist, einem sehr einflussreichen lehrbuch, das auch die schemasprache verwendet und viel zeit damit verbringt, lambda-abstraktionen als einzuführen ein konzept.</p>
Parameter von Lambda-Ausdrücken verwenden keine auf Namen basierende Gleichheit, sie verwenden Referenzgleichheit. In Ihrem Ausdruck haben Sie also zwei völlig verschiedene Parameter namens `s` , einer ist definiert, wird aber nicht verwendet, der andere wird verwendet, aber nicht definiert. 

 Also, im Grunde ist Ihr Ausdruck etwas wie `s1 => s2 == "test"` , weshalb er nicht kompiliert werden kann. Die einfachste Lösung wäre, denselben Parameter zu verwenden, den der ursprüngliche Ausdruck verwendet: 


```
LambdaExpression lambda = Expression.Lambda(equal.Body, equal.Parameters.Single());

```
  Wenn Sie wirklich Ihren eigenen Parameter verwenden möchten, müssten Sie alle Instanzen des ursprünglichen Parameters im Lambda-Body durch Ihren neuen Parameter ersetzen. Der beste Weg dies zu tun, ist [`ExpressionVisitor`](http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx) zu verwenden. <p>letzteres (<code>&lt;&gt;</code>), da die bedeutung des ersteren nur klar ist, wenn sie die reihenfolge der operationen für <code>not</code> und <code>=</code> genau kennen. betreiber: eine subtilität, die leicht zu übersehen ist.</p> <p><code>more</code> ist ein grundlegender pager, mit dem sie seitenweise nach unten scrollen können. nur abwärts.</p><p><code>less</code> ist ebenfalls ein pager, verfügt jedoch über zusätzliche funktionen zum scrollen durch die eingabe nach oben und unten sowie über mehrere andere erweiterungen.</p><p>also ja. <code>less</code> ist mehr und <code>more</code> ist weniger. eine andere gebräuchliche redewendung (gemäß dem <a href="http://en.wikipedia.org/wiki/less\_(unix)">wiki-eintrag</a> ) ist "<code>less</code> ist <code>more</code>, mehr oder weniger". der name kommt von der tatsache, dass der autor (mark nudelman) im wesentlichen ein programm wollte, das "rückwärts mehr" war - das gegenteil von mehr ist <code>less</code>.</p> Hallo savest8 (André),

gerade Studenten sollen doch wissen, dass jede **endliche Reihe ohne Angabe von Randbedingungen durch unendlich viele Algorithmen "hingebastelt"** werden können. (das Summenzeichen ist ja hier irrelevant)

(unter <http://www.gerdlamprecht.de/Zahlenfolgen.html> zig Beispiele dafür)

Es kann doch nicht sein, dass die intelligenteren Studenten, die mehr Algorithmen (Funktionen usw.) kennen als andere, dann bestraft werden, nur weil "ihre Gedanken" etwas komplexer  waren als bei anderen... 

OK, Nachkommastellen-Algorithmen oder Pseudo-Zufallsgenerator-Algorithmen kann man wohl ausschließen.

( Im Gegenteil, ich würde Studenten Extra-Punkte vergeben, wenn sie neben einer primitiven noch eine andere Lösung finden... )

Die **Angabe von Randbedingungen** halte ich als **ganz wichtige Angabe einer "sauberen Aufgabenstellung"**!

Beispiele:

- Angabe, ob Brüche gekürzt sind (wurde ja schon genannt)

- Angabe, ob Interpolationspolynom (will man dies nicht explizit nennen, kann dies auch indirekt erfolgen, wenn durch Angabe der maximalen (Ganz-)Zahl im Algorithmus & genügen viele Glieder ein Polynom ausgeschlossen wird; Beispiel oben taucht ja die Zahl 9193 auf -> die Randbedingung "im Algorithmus keine Ganzzahlen über 99" oder Maximalzahl von Operatoren & Funktionen... Beispiel: (k(k(k(491*k-3842)+9193)-6610)+192)/192 )

- Angabe, ob höhere Funktionen beteiligt, sonst kommt noch so etwas:

(k(k(7k(271k-2266)+35507)-8102)+960)*Bernoulli(2k+2)/160
  


<http://www.wolframalpha.com/input/?i=table+(k(k(7k(271k-2266)%2B35507)-8102)%2B960)*bernoulli(2k%2B2)%2F160,k%3D0...4>
  


Die Angabe der maximalen Operatoren/Funktionen oder Klammern ist auch wichtig, um Lösungen wie

(2k(k((k-4)k+8)-2)+3)/3*(-1)^k/k!
  


{ LINK: <http://www.wolframalpha.com/input/?i=table++(2k(k((k-4)k%2B8)-2)%2B3)%2F3*(-1)%5Ek%2Fk!,k%3D0...4>

} auszuschließen.

Sonderrolle spielen Primzahlen. Manchmal bereits in der Grundschule erwartet...

einige Programme haben sie integriert {WolframAlpha kennt Prime(x) }

... eine exakte Formel wie <http://www.lamprechts.de/gerd/php/Formeln/Formel-7.png>

wird nie in Aufgaben abgefragt werden...

Was generell viele falsche Gedankengänge vertreiben hilft, sind mehr als 5 Glieder in der Aufgabenstellung.

wenn da noch -243/120 steht, **sieht man schneller**, dass:

- Vorzeichen immer wechselt

- hier nicht gekürzt wurde

- 120 bei der Fakultät auftaucht

- das Interpolationspolynom kaum noch mit üblichen Faktoren dargestellt werden kann (Taschenrechnergenauigkeit reicht nicht mehr) hallo,

ich habe das buch, ich habe kapitel 13 gerade gelesen (aber völlig zusammenhangslos, weil es lange her ist, seit ich das buch tatsächlich gelesen habe). du hast glück, ich habe mit kapitel 14 weitergemacht! also:

"wie lautete sherlock holmes’ prinzip? ‚hat man das unmögliche erst einmal aus… Bei den Begriffen kommt es zwangsläufig zu Überschneidungen. Argumentation bedeutet, dass du eine Behauptung mit Gründen (Argumente) stützt und damit die Richtigkeit der Behauptung belegst oder belegen willst. In einer Stellungnahme nimmst du zu dem, was jemand gesagt oder geschrieben hat, Stellung, bestärkend, lobend, ablehnend, wie auch immer. Also könnte etwa jemand einen Leserbrief in deiner Heimatzheitung gegen eine Umgehungsstraße argumentiert haben und zu dem Schluss gekommen sein, dass sie überflüssig sei. Dazu kannst du deinerseits in einem Leserbrief Stellung nehmen, indem du die These aufstellst, dass sie sehr wohl ihren Sinn hätte. Dazu baust du jetzt deine Argumentation auf, also du bringst mehrere Argumente für den Bau. Wenn du diese Argumentation allerdings frei von politischer Gebundenheit (Partei - parteiisch) führst, wirst anerkennen müssen, dass auch der andere Leser eventuell sinnvolle Argumente hatte. Dabei kannst du dann vielleicht zu einer Art Kompromiss kommen, dass die Straaße also Sinn hat, dass aber eventuell noch Planungsänderungen sinnvoll seien, so könnten dann gewichtige Einwände des anderen mit in die Lösung einbezogen werden. Durch eine solche faire und sachliche Argumentation führt man eher sinnvolle Lösungen herbei. <p>es ist wahrscheinlich ein versuch, passwörter zu entmutigen, die zu gängigen formaten oder zeichenmasken passen. wenn für eine kennwortrichtlinie die verwendung einer nummer erforderlich ist, setzen viele personen ihre nummer am ende eines wortes oder von wörtern. hier einige beispiele aus unternehmensumgebungen:</p><ul> <li> <a href="http://passwordresearch.com/stats/statistic397.html">netspi top password masks für 2015</a> </li> <li> <a href="http://passwordresearch.com/stats/statistic376.html">2015 trustwave global security report - kennwortmasken</a> </li> </ul><p>angreifer mögen diese benutzergewohnheit, weil sie das knacken oder erraten von hybrid-passwörtern erleichtert. sie können sich darauf konzentrieren, wortlisten mit am ende hinzugefügten zahlen zu kombinieren, anstatt einen zeitaufwändigeren brute-force-ansatz zu wählen.</p><p>einige organisationen implementieren eine solche richtlinie, um die sicherheit zu verbessern, indem benutzer dazu gebracht werden, ihre nummern einzugeben. dies ist ein weniger vorhersehbarer ort. es hört sich so an, als würden sie dies in ihrer situation nicht mit einer anderen komplexitätsprüfung kombinieren und stattdessen alle passwörter ablehnen, die mit einer zahl enden, unabhängig davon, wie zufällig sie ansonsten sind. das ist keine sehr gute möglichkeit, diese art der überprüfung zu implementieren, aber sie sind mit diesem ansatz nicht allein.</p> <p> <a href="http://docs.oracle.com/javase/tutorial/java/javaoo/accesscontrol.html">das offizielle tutorial</a> kann für sie von nutzen sein.</p><pre> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | │ klasse │ paket │ unterklasse │ unterklasse │ welt | | │ │ │ (gleiche packung) │ (verschiedene packungen) │ | | ───────────┼───────┼─────────┼ ──────────┼──────────┼──────── | | public │ + │ + │ + │ + │ + | | ───────────┼───────┼─────────┼──────────┼─── ───────┼──────── | | protected │ + │ + │ + │ + │ | | ───────────┼───────┼─────────┼──────────┼─── ───────┼──────── | | kein modifikator│ + │ + │ + │ │ | | ───────────┼───────┼─────────┼──────────┼─── ───────┼──────── | | privat │ + │ │ │ │ | | \_\_\_\_\_\_\_\_\_\_\_ | \_\_\_\_\_\_\_ | \_\_\_\_\_\_\_\_\_ | \_\_\_\_\_\_\_\_\_\_ | \_\_\_\_\_\_\_\_\_\_ | \_\_\_\_\_\_\_\_ | +: zugänglich leer: nicht zugänglich </pre> <p>was sie erstellen möchten, ist eine <a href="http://en.wikipedia.org/wiki/domain-specific\_language">domänenspezifische sprache</a> . das grundprinzip dieser art von (programmier-) sprache lautet: halten sie die syntax so einfach wie möglich, während sich einfach auf "vom menschen lesbar" bezieht, indem sie alle nicht benötigten funktionen entfernen.</p><h2>schwierigkeiten der c-syntax</h2><p>was macht c-syntax schwer zu schreiben:</p><ul> <li>fehlendes nachlaufen; ich habe viele anfänger gesehen, die auf diesem fluch waren.</li> <li>fehlend} oder).</li> <li>das konzept der zeiger <em> (sie werden diesen wahrscheinlich nicht brauchen) </em></li> <li>variable bereiche</li> <li>copy-by-value vs. referenzen</li> </ul><p>wenn sie eine kleine teilmenge der sprachfunktionen verwenden, ist der code sowohl leichter zu lesen als auch zu schreiben (sofern er konsistent ist).</p><h2>beispiel</h2><p>angenommen, der code muss ausdrücken, dass prozess a von prozess b abhängig ist.</p><pre><code>process a = "cook something"; process b = "go shopping."; depends\_on(a, b); </code></pre><p>oder:</p><pre><code>cook something &lt;- go shopping </code></pre><p>im zweiten beispiel muss der "codierer" nicht einmal das konzept der parameter kennen!</p><h2>technische komplexität beeinflusst die benutzerfreundlichkeit</h2><p>was am ende mindestens genauso wichtig sein kann: eine anständige kompilierungs-/debugging-umgebung, fehlermeldungen, die zur lösung des eigentlichen problems beitragen usw. aufgrund der technischen schwierigkeiten beim parsen von c gibt der compiler häufig nur schwache fehler aus im zusammenhang mit der wahren ursache. auch hier hilft eine einfache syntax.</p> <p>sie versuchen, ein problem zu lösen, das sie gar nicht erst haben sollten: <strong>kennwortwiederverwendung</strong></p><p>das konzept ist einfach. sie denken an ein "gutes" passwort und verwenden dieses für alles. ihr bankkonto, online-shopping, ihr e-mail-anbieter usw.</p><p>das problem ist, wenn alle von ihnen durchgesickert sind, sind alle anderen konten möglicherweise in gefahr. <strong>dies ist ein völlig unnötiges risiko!</strong></p><h1>was ist mit meinem vorgeschlagenen schema?</h1><p>sie selbst sagten, erfinden sie das rad nicht neu. wenn sie das tatsächlich tun würden, müssten sie entweder eine anwendung schreiben, die die hashes für sie berechnet, oder sie selbst berechnen und speichern.</p><p>es gibt bereits anwendungen, die das problem der speicherung von anmeldeinformationen lösen, und sie machen es viel besser: offline-passwort-manager</p><h1>warum sind offline-passwort-manager besser?</h1><p>weil sie wirklich zufällige und eindeutige passwörter generieren. es besteht keine notwendigkeit, kryptographie in diese zu bringen. ich muss mein passwort für mein e-mail-konto nicht daran binden, dass es die zeichenfolge "gmail.com" enthält.</p><p>weil <code>sn2\zj2cw92dqx^{$omqac\_p'xr|md)[</code> ist definitiv ein besseres passwort als die md5-summe von <code>hunter2+gmail.com</code> (es ist <code>01f9a94a0febf268495d08f5960e7f05</code>, falls du dich gewundert hast).</p>