werte in der funktionsprogrammierung "merken"
<p>ich habe beschlossen, die aufgabe des lernens der funktionalen programmierung auf mich zu nehmen. bisher war es eine tolle zeit, und ich habe sozusagen das licht gesehen. leider kenne ich keinen funktionierenden programmierer, von dem ich fragen abwerfen kann. einführung in stack exchange.</p><p>ich nehme an einem web-/softwareentwicklungskurs teil, aber mein lehrer ist mit funktionaler programmierung nicht vertraut. er kann es gut gebrauchen, und er hat mich nur gebeten, ihm zu helfen, zu verstehen, wie es funktioniert, damit er meinen code besser lesen kann.</p><p>ich entschied, dass der beste weg, dies zu tun, darin besteht, eine einfache mathematische funktion zu veranschaulichen, beispielsweise einen wert auf eine potenz zu erhöhen. theoretisch könnte ich das leicht mit einer vorgefertigten funktion machen, aber das würde den zweck eines beispiels zunichte machen.</p><p>wie auch immer, ich habe einige schwierigkeiten herauszufinden, wie man einen wert hält. da dies eine funktionale programmierung ist, kann ich die variable nicht ändern. wenn ich dies unbedingt codieren würde, würde es ungefähr so ​​aussehen:</p><p><em>(das folgende ist alles pseudocode)</em></p><pre><code>f(x,y) { int z = x; for(int i = 0, i &lt; y; i++){ x = x * z; } return x; } </code></pre><p>bei der funktionalen programmierung war ich mir nicht sicher. das habe ich mir ausgedacht:</p><pre><code>f(x,y,z){ if z == 'null', f(x,y,x); else if y &gt; 1, f(x*z,y-1,z); else return x; } </code></pre><p>ist das richtig? ich muss in beiden fällen den wert <code>z</code> halten, war mir aber nicht sicher, wie ich das in der funktionsprogrammierung machen soll. theoretisch funktioniert die art und weise, wie ich es gemacht habe, aber ich war mir nicht sicher, ob es „richtig“ war. gibt es einen besseren weg, dies zu tun?</p>
<p>zunächst einmal herzlichen glückwunsch zum "sehen des lichts". sie haben die software-welt zu einem besseren ort gemacht, indem sie ihren horizont erweitert haben.</p><p>zweitens gibt es ehrlich gesagt keine möglichkeit, dass ein professor, der die funktionale programmierung nicht versteht, etwas nützliches über ihren code sagen kann, außer banalen kommentaren wie "die einrückung sieht aus". dies ist in einem webentwicklungskurs nicht so überraschend, da die meisten webentwicklungen mit html/css/javascript durchgeführt werden. abhängig davon, wie sehr sie sich tatsächlich für das erlernen der webentwicklung interessieren, möchten sie möglicherweise anstrengungen unternehmen, um die werkzeuge zu erlernen, die ihr professor lehrt (auch wenn dies schmerzhaft sein mag - ich weiß aus erfahrung).</p><p>um die angegebene frage zu beantworten: wenn ihr imperativcode eine schleife verwendet, ist ihr funktionscode wahrscheinlich rekursiv.</p><pre><code>(* raises x to the power of y *) fun pow (x: real) (y: int) : real = if y = 1 then x else x * (pow x (y-1)) </code></pre><p>beachten sie, dass dieser algorithmus tatsächlich mehr oder weniger mit dem imperativen code identisch ist. tatsächlich könnte man die obige schleife als syntaktischen zucker für iterative rekursive prozesse betrachten.</p><p>nebenbei bemerkt, es ist weder in ihrem imperativ- noch in ihrem funktionscode ein wert von <code>z</code> erforderlich. sie sollten ihre imperative funktion so geschrieben haben:</p><pre><code>def pow(x, y): var ret = 1 for (i = 0; i &lt; y; i++) ret = ret * x return ret </code></pre><p>anstatt die bedeutung der variablen <code>x</code> zu ändern.</p>
<p>die standardmethode für die angabe des objekttyps ist entweder <a href="http://search.cpan.org/perldoc?perlfunc#ref"><code>ref</code></a> oder <a href="http://search.cpan.org/perldoc?scalar::util"><code>scalar::util</code></a> <code>::blessed</code>. wenn sie<em> wissen </em>das objekt gesegnet ist, geben sie dieselbe information zurück. </p><pre><code>my $class1 = blessed( $obj ); my $class2 = ref $obj; </code></pre><p><code>ref</code> gibt jedoch auch 'hash' für nicht gesegnete hashes zurück, während <code>blessed</code> dieses spiel ablehnt. </p><p>für eine liste von methoden ist es für den gesegneten zeigerstil eines perl-objekts einfach, eine davon selbst zu codieren. der folgende code funktioniert ziemlich gut für mich. es gibt die namen der funktionen (diejenigen, die den &quot;code-slot&quot; des angegebenen namens annehmen) zurück, die dem paket zugeordnet sind, das sie definiert. </p><pre><code>sub class\_methods { use class::isa; my $obj = shift; return unless ref( $obj ); my %meth\_names; foreach my $anc ( class::isa::self\_and\_super\_path( ref $obj ), 'universal' ) { my $stash = \%{"$anc\::"}; my @funcs = grep { m/^[\_\p{alpha}]/ # begins with \_ or alpha &amp;&amp; !exists $meth\_names{$\_} # no clobbering &amp;&amp; defined *{$stash-&gt;{$\_}}{code} # has a filled code slot } keys %$stash ; # assign to the "hash slice", keyed by all the entries in @funcs # the value of $anc repeated as many times as elements in @funcs. @meth\_names{@funcs} = ( $anc ) x @funcs; } return %meth\_names; } </code></pre><ul> <li><p>dies funktioniert auch für relativ komplexe objekte, aber wenn das besitzende paket eine menge generierten codes enthält, ist es nicht besonders hilfreich zu wissen, in welchem ​​paket die generatoren den code-pointer stecken. es wird mehr bedeuten, welches paket zu finden ist generiert den code. </p></li> <li><p>ist dies der fall, erhalten sie<em> might </em>den code aus der ausführung ihres codes, einschließlich <a href="http://search.cpan.org/perldoc?data::dumper"><code>data::dumper</code></a> und setzen von <code>$data::dumper::deparse</code> auf 1 wie folgt: (<code>local $data::dumper::deparse = 1;</code>) und dann den code-zeiger wie folgt: <code>say dumper( $code\_ref );</code></p></li> <li><p>es<em> won't </em>funktioniert für gültige methoden, die noch mit einer beliebigen <code>autoload</code>-methode erstellt werden müssen. wenn sie diese in der liste sehen, macht das objekt möglicherweise mehr, aber was es alles tut, wissen sie nicht.</p></li> <li><p>die &quot;basisklasse&quot; <code>universal</code> ist enthalten, da diese klasse verhalten enthält, das vom objekt verwendet werden kann. </p></li> </ul><p>viel glück.</p> <p><code>i</code> und <code>j</code> werden in der regel seit geraumer zeit als indizes in einigen mathematischen bereichen verwendet (z. b. sehen sie selbst in artikeln, die älter sind als höhere sprachen, häufig dinge wie "x.<sub>ich, j</sub>", besonders in sachen wie einer summe).</p><p>als sie fortran entwarfen, beschlossen sie (anscheinend), dasselbe zuzulassen, sodass alle variablen, die mit "i" bis "n" beginnen, standardmäßig auf ganzzahl und alle anderen auf real (gleitkomma) eingestellt sind. für diejenigen, die es verpasst haben, ist dies die quelle des alten witzes "gott ist real (sofern nicht als ganzzahl deklariert)".</p><p>die meisten menschen scheinen wenig grund gesehen zu haben, dies zu ändern. es ist weithin bekannt und verstanden und ziemlich prägnant. hin und wieder sieht man etwas, das von einem psychotiker geschrieben wurde, der glaubt, dass etwas wie ein echter vorteil ist:</p><pre class="lang-c prettyprint-override"><code>for (int outer\_index\_variable=0; outer\_index\_variable &lt; 10; outer\_index\_variable++) for (int inner\_index\_variable=0; inner\_index\_variable &lt; 10; inner\_index\_variable++) x[outer\_index\_variable][inner\_index\_variable] = 0; </code></pre><p>zum glück ist dies jedoch ziemlich selten, und die meisten styleguides weisen jetzt darauf hin, dass lange, beschreibende variablennamen <em>können</em> nützlich sein, sie <em>nicht</em> sie immer benötigen, insbesondere für etwas dies ist der fall, wenn der gültigkeitsbereich der variablen nur ein oder zwei codezeilen umfasst.</p> Ähm Du sollst eine Wertetabelle machen. D.h. für x Sachen im Bereich von -5 bis 1 einsetzen und dazu die y-Koordinate berechnen. Die Punkte aus x und y Koordinaten dann in ein Koordinatensystem einzeichnen.


Was kannst du daran nicht? Zunächst vorweg: Ein Programm, das beide Anforderungen bedient, gibt es nicht. 


Eine neutrale Übersicht über Notenprogramme inkl. Liste gibts in der Wikipedia unter dem Schlagwort: "Notensatzprogramm". Mein Tipp: PriMus Standard von Columbus Soft


Eine neutrale Übersicht über automatische Transkriptionssoftware gibts auch in der Wikipedia unter dem Schlagwort: "Transkription (Musik)", Unterabschnitt "Automatische Musiktranskription" Mein Tipp: Das ist entweder zu teuer für dich oder funktioniert nur unbefriedigend, es sei denn du hast einstimmige wirklich gute Aufnahmen... und mir fällt noch ein. Wenn du ein iPhone hast, schau mal nach der App "Scorecleaner Notes"...


Es gibt auch Programme, die beim manuellen Transkribieren helfen sollen, indem man z.B. mit ihnen die Wave-Datei bei konstanter Tonhöhe langsamer oder schneller abspielen kann: zum Beispiel Transcribe! (<http://www.seventhstring.com/xscribe/screenshots.html>)


Was man eigentlich noch hätte wissen müssen, um dir nen guten Tipp zu geben, wäre, ob man Schwyzerörgeli als normale Noten setzt, oder ob es da irgendwelche Tabulaturen (etwa so wie für steirische Harmonika) gibt? (1) Sei \( X \) eine *nicht-leere* Menge.  

(2) Sei \( \mathcal{M} \subseteq \mathcal{P}(X) \) ein Mengensystem mit \( \emptyset \in \mathcal{M} \) als Teilmenge der Potenzmenge von \( X \).

Dann ist `\[ \varphi: \mathcal{M} \rightarrow \mathbb{C} \]` 
eine Mengenfunktion auf \( \mathcal{M} \). Je nach Notwendigkeit kann \( \mathbb{C} \) auf die erweiterte reelle Zahlen \( \bar{\mathbb{R}} \) oder auf positive reelle Zahlen \( \mathbb{R}\_+ \) eingeschränkt werden.

**Beispiel: Elemente-zählende Mengenfunktion**Sei das Mengensystem \( \mathcal{M} = \{ \emptyset,~ \{7\},~ \{42, 17, 0\} \} \). Dann kann die Mengenfunktion beispielsweise die Einträge der Elemente von \( \mathcal{M} \) zählen:`\[ \varphi(\emptyset) ~=~ 0, ~~~ \varphi(\{7\}) ~=~ 1, ~~~ \varphi(\{42,~ 17,~ 0\}) ~=~ 3 \]` Wenn eine Fahrschule knapp kalkuliert wird meist auch kein Wert auf die Inhalte gelegt - Hauptsache am Ende hat der Schüler sein Kärtchen und dafür unter x€ bezahlt. Was ist so ein Menschenleben schon wert, Geld jedenfalls ist wichtiger. Ich habe dies bei meiner Wahl der Fahrschule berücksichtigt, habe Erfahrungen anderer gesammelt und letztendlich sogar die Preise verglichen. Bin dann zur teuersten (auf dem Papier ;)) hier im Ort gegangen, dort wurden die besten Erfahrungen gemacht und Wert auf die korrekte Ausbildung (Inhalte vermitteln, lehren) gelegt. Im Theorieunterricht wurde anfangs die Fahrphysik besprochen, Kurventechniken und wann man derer anwendet, Kurvenlinie, Lenkimpuls - alles war dabei. In der ersten Fahrstunde wurde das Motorrad dann erstmal über den Platz geschoben, der Kipp-Punkt wurde ausgelotet und so weiter. Erst dann ging es ans Fahren, während der Fahrt gab der Lehrer immer wieder Tipps zur Kurventechnik und Linienwahl, so dass ich mich später wirklich gut vorbereitet gefühlt habe. <p>erwägen sie die verwendung eines <strong> mehrfachauswahl-designs mit token </strong>. die filter-as-you-type-funktion ist nett, aber nicht unbedingt erforderlich. diese funktionieren gut, wenn im allgemeinen anwendungsfall entweder einer oder nur wenige ausgewählt werden. die benutzerfreundlichkeit nimmt jedoch schnell ab, wenn sie viele auswählen müssen, da der benutzer das menü für jedes element erneut aufrufen muss.</p><p><img src="https://i.stack.imgur.com/fth7o.png" alt="multi-select with tokens, via harvesthq.github.com/chosen"></p><ul> <li> <a href="http://harvesthq.github.com/chosen/">http://harvesthq.github.com/chosen/</a> </li> <li> <a href="http://designingwebinterfaces.com/the-multi-select-solution">http://designingwebinterfaces.com/the-multi-select-solution</a> </li> <li> <a href="http://loopj.com/jquery-tokeninput/">http://loopj.com/jquery-tokeninput/</a> </li> </ul><p>sie haben die tokenisierte mehrfacheingabemethode bereits in ihren e-mail-clients gesehen. <img src="https://i.stack.imgur.com/h1aid.png" alt="multi-select-tokens in email"></p><p>wenn häufig mehrere ausgewählt werden, können sie ein kontrollkästchenmenü <strong> </strong> in betracht ziehen. der unterschied besteht darin, dass das dropdown-menü über alle klicks hinweg dauerhaft bleibt (und die mehrfachauswahl visuell kommuniziert). daher kann der benutzer mit klick-klick-klick schnell mehrere elemente auswählen. für unsere web-app möchten wir dieses design durch hinzufügen der token-funktionalität verbessern.</p><p><img src="https://i.stack.imgur.com/zqizh.png" alt="checkbox menu, via realestate.com.au"></p><ul> <li> <a href="http://www.realestate.com.au/">http://www.realestate.com.au/</a> </li> <li> <a href="http://blogfreakz.com/jquery/jquery-dropdown-check-list/">http://blogfreakz.com/jquery/jquery-dropdown-check-list/</a> </li> </ul> <p>ein standard-fortschrittsbalken und eine anzahl von karten wären wahrscheinlich ausreichend. ich bin jedoch der meinung, dass dies etwas ist, bei dem sie ein bisschen kreativ sein könnten: der effekt eines streudiagramms könnte nizza sein, sie könnten auch die neuesten pixel am hellsten machen und die älteren verblassen lassen.</p><p>wenn sie das generierte pixelplot in bezug auf die leistung speichern, sodass es nicht jedes mal berechnet werden muss, wenn es angezeigt wird, sollte dies wirklich kein problem sein. ich denke, ich würde nicht das canvas-tag verwenden, sondern ein vom server generiertes image. die aktualisierungsaktion selbst sollte nicht zu kompliziert sein: sie müssen nur das bild abrufen, das sie bereits haben, und das letzte update (oder aktualisierungen seit dem letzten rendern des bildes) abrufen und genau diese pixel ändern. wenn sie sie nach zeit verblassen möchten, verblassen sie zuerst das bereits vorhandene bild und fügen sie dann den neuesten zeitstempel der überblendungsaktion hinzu, sodass sie dies nur einmal am tag oder einmal pro stunde oder was auch immer tun. (sie können es auch bei jedem schritt tun.)</p><p>jetzt ist es weitaus komplexer als nötig, um nur fortschrittsinformationen bereitzustellen. aber es könnte eine sehr nette funktion sein und interessant zu bauen sein! und ich denke, es ist sehr machbar, es so zu implementieren, dass es ihre ressourcen nicht belastet.</p> Kein kurzer Schnitt, sondern kapselt dies in eine Funktion ein, und Ihr Code ist viel lesbarer. 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)