<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[FP welche Sprache?]]></title><description><![CDATA[<p>(leicht off-topic)</p>
<p>Welche Sprache empfiehlt sich zum Einstieg in die Funktionale Programmierung?<br />
Sollte aktuell und verbreitet sein, und, wenn es geht, mit aktiver Community.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193427/fp-welche-sprache</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 14:44:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193427.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Sep 2007 06:08:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 06:08:04 GMT]]></title><description><![CDATA[<p>(leicht off-topic)</p>
<p>Welche Sprache empfiehlt sich zum Einstieg in die Funktionale Programmierung?<br />
Sollte aktuell und verbreitet sein, und, wenn es geht, mit aktiver Community.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372761</guid><dc:creator><![CDATA[beginner92]]></dc:creator><pubDate>Wed, 26 Sep 2007 06:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 11:16:05 GMT]]></title><description><![CDATA[<p>Haskell, OCaml oder Erlang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372995</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 26 Sep 2007 11:16:05 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 11:31:18 GMT]]></title><description><![CDATA[<p>Oder Scheme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373016</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 26 Sep 2007 11:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 13:22:50 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Oder Scheme.</p>
</blockquote>
<p>hat aber ein set! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373131</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 26 Sep 2007 13:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 13:29:19 GMT]]></title><description><![CDATA[<p>Na und? Ocaml auch. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373133</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 26 Sep 2007 13:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 13:44:15 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Na und? Ocaml auch. :p</p>
</blockquote>
<p>oh verdammt. Hab das ganz naiv in meine Liste aufgenommen. Vielleicht sollte ich es durch XSLT ersetzen *duck*</p>
<p>Aber okay, Scheme hat das hervorragende SICP!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373146</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 26 Sep 2007 13:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 15:00:09 GMT]]></title><description><![CDATA[<p>Ganz klar C++ :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373196</guid><dc:creator><![CDATA[Mr. N]]></dc:creator><pubDate>Wed, 26 Sep 2007 15:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 15:05:01 GMT]]></title><description><![CDATA[<p>Haskell würd ich nicht nehmen. Das macht ganz ganz komische Sachen, nur weil man etwas Ein- oder Ausgeben will.<br />
Erlang ist da toller und man kann damit auch noch feine parallele Programme schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373197</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 26 Sep 2007 15:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 15:08:55 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Haskell würd ich nicht nehmen. Das macht ganz ganz komische Sachen, nur weil man etwas Ein- oder Ausgeben will.</p>
</blockquote>
<p>Die &quot;komische Sache&quot; nennt sich halt funktionale Programmierung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373200</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 26 Sep 2007 15:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 15:25:46 GMT]]></title><description><![CDATA[<p>Im Ernst, wenn das Ziel wirklich ist, funktionale Programmierung zu lernen, ist Haskell denke ich optimal.</p>
<p>Das andere Zeug ist halt nur halb funktional.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373207</guid><dc:creator><![CDATA[Mr. N]]></dc:creator><pubDate>Wed, 26 Sep 2007 15:25:46 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 15:25:48 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten!</p>
<p>Also bleibt, von C++ mit boost oder C++ mit Prepro-Tricks abgesehen, LISP und Scheme, Haskell, OCaml und Erlang.</p>
<p>Welche von diesen ist denn die am wenigsten exotische, soll heißen: die, mit der man praktisch am meisten anfangen kann (mehr als &quot;fac n = n == 0 : 1; n != 0 : fac n-1&quot; und Quicksort wäre gut) und die am ehesten von einer community ge-maintained werden wird ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373208</guid><dc:creator><![CDATA[beginn92]]></dc:creator><pubDate>Wed, 26 Sep 2007 15:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 15:30:37 GMT]]></title><description><![CDATA[<p>Was erwartest du denn von einer funktionalen Sprache? Die genannten lassen sich alle praktisch einsetzen. (BTW LISP hat niemand erwähnt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373214</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 26 Sep 2007 15:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 16:07:05 GMT]]></title><description><![CDATA[<p>naja, mit praxisnah und nicht exotisch meine ich: Welche von denen bringt am ehesten Vorteile im beruflichen Einsatz ?</p>
<p>Wenn das andere Zeug nur halb funktional ist, wie Mr.N sagt, tendiere ich dann doch zu Haskell, obwohl mir das Aussehen der Syntx nicht besonders zusagt.<br />
OCaml sagt mir vom Aussehen der Programme her mehr zu, aber na gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373240</guid><dc:creator><![CDATA[beginn92]]></dc:creator><pubDate>Wed, 26 Sep 2007 16:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 16:19:01 GMT]]></title><description><![CDATA[<p>beginn92 schrieb:</p>
<blockquote>
<p>naja, mit praxisnah und nicht exotisch meine ich: Welche von denen bringt am ehesten Vorteile im beruflichen Einsatz ?</p>
<p>Wenn das andere Zeug nur halb funktional ist, wie Mr.N sagt, tendiere ich dann doch zu Haskell, obwohl mir das Aussehen der Syntx nicht besonders zusagt.<br />
OCaml sagt mir vom Aussehen der Programme her mehr zu, aber na gut.</p>
</blockquote>
<p>Keine funktionale Sprache wird wirklich &quot;Mainstream&quot; eingesetzt. Es gibt zwar einige Nischen, wo sie Verwendung finden, aber sie sind bei weitem nicht so verbreitet wie C, C++ oder Java.<br />
Vorteile im beruflichen Einsatz ergeben sich vor allem dadurch, dass dich funktionale Programmierung &quot;weiter bringt&quot;, was deine Art zu Programmieren weiterbringt.</p>
<p>Die einzigen mir bekannten Programme, die in einer funktionalen Sprache geschrieben sind und auch &quot;grossflaechig&quot; eingesetzt werden, sind uebrigens ins LISP geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373254</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Wed, 26 Sep 2007 16:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 16:27:31 GMT]]></title><description><![CDATA[<p>Es gibt sogar einen in Haskell geschriebenen Window-Manager: Xmonad. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373264</guid><dc:creator><![CDATA[Mr. N]]></dc:creator><pubDate>Wed, 26 Sep 2007 16:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 17:02:47 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>.filmor schrieb:</p>
<blockquote>
<p>Haskell würd ich nicht nehmen. Das macht ganz ganz komische Sachen, nur weil man etwas Ein- oder Ausgeben will.</p>
</blockquote>
<p>Die &quot;komische Sache&quot; nennt sich halt funktionale Programmierung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Nein, sie nennt sich Monade. Und ist einfach unglaublich blöd zu programmieren, wenn in anderen auch recht funktionalen Sprachen ein io:format(&quot;blabla<sub>w</sub>n&quot;, [&quot;bla&quot;]) zur Ausgabe reicht und man mit getline einlesen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373292</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 17:27:54 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>.filmor schrieb:</p>
<blockquote>
<p>Haskell würd ich nicht nehmen. Das macht ganz ganz komische Sachen, nur weil man etwas Ein- oder Ausgeben will.</p>
</blockquote>
<p>Die &quot;komische Sache&quot; nennt sich halt funktionale Programmierung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Nein, sie nennt sich Monade. Und ist einfach unglaublich blöd zu programmieren, wenn in anderen auch recht funktionalen Sprachen ein io:format(&quot;blabla<sub>w</sub>n&quot;, [&quot;bla&quot;]) zur Ausgabe reicht und man mit getline einlesen kann.</p>
</blockquote>
<p>Also zum Beispiel 'cat' ist in Haskell leicht zu implementieren:</p>
<pre><code>main = getContents &gt;&gt;= putStr
</code></pre>
<p>Wo isn da das Problem? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373308</guid><dc:creator><![CDATA[Mr. N]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:27:54 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 18:27:51 GMT]]></title><description><![CDATA[<p>Mr. N schrieb:</p>
<blockquote>
<p>Wo isn da das Problem? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Mein Problem ist, dass sich die Syntax für I/O unverhältnismäßig stark vom Rest des Programmes unterscheidet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373356</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 26 Sep 2007 18:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Wed, 26 Sep 2007 18:42:28 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Mr. N schrieb:</p>
<blockquote>
<p>Wo isn da das Problem? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Mein Problem ist, dass sich die Syntax für I/O unverhältnismäßig stark vom Rest des Programmes unterscheidet.</p>
</blockquote>
<p>Wenn du immer nur &gt;&gt;=, &gt;&gt; und \ verwendest, dann ist die Syntax so ziemlich die gleiche wie normal auch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373364</guid><dc:creator><![CDATA[Mr. N]]></dc:creator><pubDate>Wed, 26 Sep 2007 18:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Thu, 27 Sep 2007 05:42:52 GMT]]></title><description><![CDATA[<p>also gut, probier ich es mit Haskell. Obwohl die Syntax etwas &quot;eckig&quot; aussieht, hoffentlich eine Frage der gewohnheit.<br />
Wenn es mir nicht gefällt, weiß ich ja, bei wem ich mich beschweren kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Obwohl, wenn ich im Tut &quot;do ...&quot; und &quot;{ .. ; .. }&quot; sehe, ist das nicht auch wieder imperative/sequenzielle Programmierung, durch die Hintertür eben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373530</guid><dc:creator><![CDATA[beginn92]]></dc:creator><pubDate>Thu, 27 Sep 2007 05:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Thu, 27 Sep 2007 05:58:48 GMT]]></title><description><![CDATA[<p>beginn92 schrieb:</p>
<blockquote>
<p>Obwohl, wenn ich im Tut &quot;do ...&quot; und &quot;{ .. ; .. }&quot; sehe, ist das nicht auch wieder imperative/sequenzielle Programmierung, durch die Hintertür eben?</p>
</blockquote>
<p>Wenn du es darauf anlegst, kannst du damit in einem imperativen Stil schreiben. Aber der Trick ist, dass man do {} fuer viele Funktionen ueberhaupt nicht braucht. Die do-Notation ist auch nur syntactic sugar fuer die Operatoren, die MrN bereits genannt hat.<br />
Die do-Notation kann sogar verwendet werden um damit Assembler-Code zu schreiben. Fuer Spruenge vorwaerts, also an Labels die erst spaeter definiert werden, muss jedoch die Syntax ein kleines Stueck erweitert werden (ghc hat diese Erweiterung). (<a href="http://www.haskell.org/haskellwiki/The_Monad.Reader" rel="nofollow">&quot;The Monad Reader&quot;, Issue 6</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373539</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Thu, 27 Sep 2007 05:58:48 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Thu, 27 Sep 2007 12:19:44 GMT]]></title><description><![CDATA[<p>Mr. N schrieb:</p>
<blockquote>
<p>.filmor schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>.filmor schrieb:</p>
<blockquote>
<p>Haskell würd ich nicht nehmen. Das macht ganz ganz komische Sachen, nur weil man etwas Ein- oder Ausgeben will.</p>
</blockquote>
<p>Die &quot;komische Sache&quot; nennt sich halt funktionale Programmierung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Nein, sie nennt sich Monade. Und ist einfach unglaublich blöd zu programmieren, wenn in anderen auch recht funktionalen Sprachen ein io:format(&quot;blabla<sub>w</sub>n&quot;, [&quot;bla&quot;]) zur Ausgabe reicht und man mit getline einlesen kann.</p>
</blockquote>
<p>Also zum Beispiel 'cat' ist in Haskell leicht zu implementieren:</p>
<pre><code>main = getContents &gt;&gt;= putStr
</code></pre>
<p>Wo isn da das Problem? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Monaden koennen schon stoerend sein, wenn man z.B. mit Zufall hantiert und seine Werte immer in eine IO-Monade packen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373838</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 27 Sep 2007 12:19:44 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Fri, 28 Sep 2007 01:07:33 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Bashar schrieb:</p>
<blockquote>
<p>Oder Scheme.</p>
</blockquote>
<p>hat aber ein set! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> :p</p>
</blockquote>
<p>Erlang unterhaelt zu jedem Prozess eine Hashmap. In dieser lassen sich nach Belieben Werte setzen und veraendern, wodurch wir bei der Existenz von set! bei Erlang waeren ;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374114</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Sep 2007 01:07:33 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Fri, 28 Sep 2007 01:26:28 GMT]]></title><description><![CDATA[<p>Mal eine GANZ doofe Frage bezüglich Funktionaler Programmierung und &quot;Set&quot; (Mutable State): wie verträgt sich das?<br />
Bzw. wie handhaben das die Sprachen bzw. die Compiler/Interpreter?</p>
<p>Der grosse Vorteil von funktionalen Sprachen ist ja, wenn ich das richtig verstehe, dass Funktionen eben keine Seifenblasen machen, äh, Seiteneffekte haben. Das Programm wird dadurch von etwas Dynamischem zu etwas Statischem was nurmehr (mit einem bestimmten Input) &quot;ausgewertet&quot; wird um das Ergebnis zu bestimmen. Grob gesagt.</p>
<p>Ein grosser Vorteil für den Compiler/Interpreter ist doch hier dass er Funktionen beliebig &quot;wegoptimieren&quot; kann, oder die Auswertung &quot;aufschieben&quot; (lazy evaluation) bis der Wert wirklich gebraucht wird (falls er das jemals wird).<br />
Bloss wenn man nun Mutable State einführt &quot;bricht&quot; doch das alles, d.h. wenn der Compiler Funktionen &quot;wegoptimieren&quot; würde die Mutable State angreifen könnte sich ja das Verhalten des Programmes verändern. Genauso wenn die Ausführung &quot;aufgeschoben&quot; wird.</p>
<p>Flaggt der Compiler/Interpreter einfach alle Funktionen die &quot;Mutable State&quot; ändern, bzw. Funktionen aufrufen die &quot;Mutable State&quot; ändern, und stellt dann sicher dass diese an den passenden Stellen noch &quot;ausgeführt&quot; werden, so dass man immer den erwarteten Output bekommt?</p>
<p>Und ist das nicht auch ein Nachteil für den Programmierer, dass Funktionen nun doch Seiteneffekte haben können? Schliesslich ist es für den Programmierer auch nett wenn er sich keine Gedanken über sowas (Seiteneffekte) machen muss. Oder muss man Funktionen die Seiteneffekte haben speziell als solche auszeichnen? Das würde zumindest verhindern dass man denkt man schreibt eine Funktion ohne Seiteneffekte, aber in wirklichkeine eine MIT Seiteneffekten schreibt, indem man andere Funktionen mit Seiteneffekten aufruft.</p>
<p>Oder mache ich hier einen Denkfehler und das alles ist viel einfacher? Oder viel komplizierter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374116</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 28 Sep 2007 01:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Fri, 28 Sep 2007 02:22:55 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Oder mache ich hier einen Denkfehler und das alles ist viel einfacher? Oder viel komplizierter?</p>
</blockquote>
<p>Du siehst das schon richtig. Funktionale Sprachen, bei denen man jederzeit ein set! und damit mutable state verwenden kann, sind nicht das, was man unter &quot;rein funktional&quot; versteht. Lisp wird allgemein als funktionale Sprache angesehen, die Funktionen koennen aber beliebige Seiteneffekte haben. Daher kann Lisp nicht das Feature &quot;referentielle Transparenz&quot; bieten, das du in deinem Posting umschrieben hast.<br />
Andere Sprachen wie Haskell oder Clean bieten dieses Feature, allerdings auf Kosten der Seiteneffekte an beliebigen Stellen. In beiden Sprachen muessen Funktionen gekennzeichnet werden, die Seiteneffekte haben. Dieses Kennzeichnen laeuft in Haskell ueber den Rueckgabewert und damit ueber das Typsystem. In Clean ist es AFAIK auch der Rueckgabewert, aber Clean benutzt dafuer eine etwas andere Theorie als Haskell.</p>
<p>In Haskell steht im Rueckgabewert z.B. IO, wenn die Funktion I/O-Operationen macht. Eine Funktion wie das Sieb des Eratosthenes benoetigt (wenn sie effizient sein soll) auch mutable state, allerdings nicht IO im Rueckgabetyp. Hier koennte man sinngemaess &quot;State BoolArray&quot; waehlen. Damit wird zum einen festgelegt, dass diese Funktion mutable state hat, zum anderen wird aber garantiert, dass diese Funktion keine I/O-Operationen macht. Der mutable state, den diese Funktion verwendet, bricht sogar nicht einmal die referentielle Transparenz. Das funktioniert dank der Monaden.</p>
<p>In Lisp ist es mit der Optimierung soweit ich weiss wie in C++: Der Compiler kann Funktionsaufrufe deren Rueckgabewert nicht benoetigt wird nur dann weglassen, wenn er den Code der aufgerufenen Funktion kennt und feststellt, dass dieser seiteneffektfrei ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374126</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Fri, 28 Sep 2007 02:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to FP welche Sprache? on Fri, 28 Sep 2007 03:09:58 GMT]]></title><description><![CDATA[<p>Erstmal danke für die Erklärung!<br />
Aber noch eine Frage: kann man denn in z.B. Haskell oder Clean dem Compiler/Interpreter mitteilen dass z.B. so eine Funktion wie das Sieb des Dingsbums zwar mutable State verwendet, der Aufruf aber trotzdem wegoptimiert werden darf? Und/oder dem Compiler/Interpreter mitteilen dass SiebVomDingsBums(N) immer das gleiche Resultat liefern wird wenn N gleich ist, egal wie oft und wann man es aufruft?</p>
<p>EDIT: oder geht's hier nur um &quot;lokalen&quot; State (das was bei anderen Sprachen halt &quot;Stack Variablen&quot; sind)? Der ist ja unproblematisch, d.h. der kann eine Funktion auch nich nicht-deterministisch machen, da er ja nicht von Aufruf zu Aufruf erhalten bleibt, und auch nie Seiteneffekte verursachen, da er ja lokal ist. -- &quot;Problematisch&quot; sind halt Funktionen die globalen State verwenden... /EDIT</p>
<p>----</p>
<p>Weil du C++ erwähnt hast: ich wünsche mir das schon länger für C++ als Erweiterung, also dass man dem Compiler durch irgendein Keyword sagen kann dass eine Funktion &quot;deterministisch&quot; ist (also das Ergebnis nur vom Input abhängt), und dass sie keine (wichtigen) Seiteneffekte hat.<br />
Weiters wäre es natürlich nett wenn man solche &quot;deterministischen&quot; Funktionen dann auch in Template-Metaprogrammierung verwenden könnte, bzw. der Compiler sie an den passenden Stellen einfach beim Compilieren &quot;ausrechnen&quot; und durch Konstanten ersetzen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374131</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 28 Sep 2007 03:09:58 GMT</pubDate></item></channel></rss>