<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.mafiasi.de/index.php?action=history&amp;feed=atom&amp;title=P1-WS04-MusterLoesung13.txt</id>
	<title>P1-WS04-MusterLoesung13.txt - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mafiasi.de/index.php?action=history&amp;feed=atom&amp;title=P1-WS04-MusterLoesung13.txt"/>
	<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=P1-WS04-MusterLoesung13.txt&amp;action=history"/>
	<updated>2026-10-18T11:00:16Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Fachschaft Informatik</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=P1-WS04-MusterLoesung13.txt&amp;diff=3086&amp;oldid=prev</id>
		<title>PatrickFey: 2 Versionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=P1-WS04-MusterLoesung13.txt&amp;diff=3086&amp;oldid=prev"/>
		<updated>2007-11-05T05:50:05Z</updated>

		<summary type="html">&lt;p&gt;2 Versionen&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 5. November 2007, 05:50 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>PatrickFey</name></author>
	</entry>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=P1-WS04-MusterLoesung13.txt&amp;diff=3085&amp;oldid=prev</id>
		<title>fsrwiki_&gt;Oddmuse Import: link fix</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=P1-WS04-MusterLoesung13.txt&amp;diff=3085&amp;oldid=prev"/>
		<updated>2007-11-05T05:49:25Z</updated>

		<summary type="html">&lt;p&gt;link fix&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 5. November 2007, 05:49 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;                          P1 WiSe 2004/2005&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;                          P1 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;WiSe&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]] &lt;/ins&gt;2004/2005&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;                        Musterlösung Blatt 13&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;                        Musterlösung Blatt 13&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l68&quot;&gt;Zeile 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   (&amp;lt; (gewicht eintrag1) (gewicht eintrag2)))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   (&amp;lt; (gewicht eintrag1) (gewicht eintrag2)))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; DrScheme hat sort in einem Zusatzmodul, das wir erst laden müssen.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;DrScheme&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]] &lt;/ins&gt;hat sort in einem Zusatzmodul, das wir erst laden müssen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(require (lib &amp;quot;compat.ss&amp;quot;))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(require (lib &amp;quot;compat.ss&amp;quot;))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l146&quot;&gt;Zeile 146:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 146:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; Endrekursion bedeutet, daß der Rekursionsaufruf als allerletztes in&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; Endrekursion bedeutet, daß der Rekursionsaufruf als allerletztes in&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; der Funktion passiert (vgl. &amp;quot;tail context / tail recursion&amp;quot; im&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; der Funktion passiert (vgl. &amp;quot;tail context / tail recursion&amp;quot; im&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; R5RS, Abschnitt 3.5, Seite 7) und ist deswegen effizienter, weil es&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;R5RS&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;, Abschnitt 3.5, Seite 7) und ist deswegen effizienter, weil es&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; bei einem solchen Aufruf nicht mehr notwendig ist, den aktuellen&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; bei einem solchen Aufruf nicht mehr notwendig ist, den aktuellen&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; Zustand der aufrufenden Funktion zu sichern.  Normalerweise müßten&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; Zustand der aufrufenden Funktion zu sichern.  Normalerweise müßten&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l153&quot;&gt;Zeile 153:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 153:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; ablen eh nicht mehr verwendet werden (können).  Im Gegensatz zu&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; ablen eh nicht mehr verwendet werden (können).  Im Gegensatz zu&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; anderen Lisp-Varianten kann man sich bei Scheme sogar darauf&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; anderen Lisp-Varianten kann man sich bei Scheme sogar darauf&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; verlassen, daß diese Optimierung geschieht, weil der R5RS dieses&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; verlassen, daß diese Optimierung geschieht, weil der &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;R5RS&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]] &lt;/ins&gt;dieses&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; verlangt.  Der Unterschied zwischen Endrekursion und allgemeiner&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; verlangt.  Der Unterschied zwischen Endrekursion und allgemeiner&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; Rekursion wird in imperativen Programmiersprachen üblicherweise&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; Rekursion wird in imperativen Programmiersprachen üblicherweise&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>fsrwiki_&gt;Oddmuse Import</name></author>
	</entry>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=P1-WS04-MusterLoesung13.txt&amp;diff=3084&amp;oldid=prev</id>
		<title>fsrwiki_&gt;1illig: antispam</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=P1-WS04-MusterLoesung13.txt&amp;diff=3084&amp;oldid=prev"/>
		<updated>2006-12-22T05:48:10Z</updated>

		<summary type="html">&lt;p&gt;antispam&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
;;                          P1 WiSe 2004/2005&lt;br /&gt;
;;                        Musterlösung Blatt 13&lt;br /&gt;
;;&lt;br /&gt;
;;-----------------------------------------------------------------&lt;br /&gt;
;; Aufgabe 1&lt;br /&gt;
&lt;br /&gt;
(define *fang-tabelle*&lt;br /&gt;
  &amp;#039;((&amp;quot;Simon Sonntagsangler&amp;quot; &amp;quot;Hering&amp;quot; 	1.2)&lt;br /&gt;
    (&amp;quot;Karl Kabeljau&amp;quot;		 &amp;quot;Dorsch&amp;quot; 	8)&lt;br /&gt;
    (&amp;quot;Marietta Mogel&amp;quot; 	&amp;quot;Thunfisch&amp;quot;	30)&lt;br /&gt;
    (&amp;quot;Kapitaen Ahab&amp;quot; 	&amp;quot;Pottwal&amp;quot;	2500)&lt;br /&gt;
    (&amp;quot;Britta Besser&amp;quot; 		&amp;quot;Dorsch&amp;quot; 	 15.2)&lt;br /&gt;
    (&amp;quot;Paul Pechvogel&amp;quot; 	&amp;quot;Tauchlehrer&amp;quot; 91.6)))&lt;br /&gt;
&lt;br /&gt;
;; (a) i.&lt;br /&gt;
;; Konstruktor: neuer-eintrag&lt;br /&gt;
(define (neuer-eintrag teilnehmer fang gewicht)&lt;br /&gt;
  (list teilnehmer fang gewicht))&lt;br /&gt;
&lt;br /&gt;
;; Test:&lt;br /&gt;
(neuer-eintrag &amp;quot;Ulli Ungeschickt&amp;quot; &amp;quot;Sardine&amp;quot; 0.5)&lt;br /&gt;
;; =&amp;gt; (&amp;quot;Ulli Ungeschickt&amp;quot; &amp;quot;Sardine&amp;quot; 0.5)&lt;br /&gt;
&lt;br /&gt;
;; ii. Selektoren: teilnehmer, fang, gewicht&lt;br /&gt;
(define (teilnehmer eintrag)&lt;br /&gt;
  (first eintrag))&lt;br /&gt;
(define (fang eintrag)&lt;br /&gt;
  (second eintrag))&lt;br /&gt;
(define (gewicht eintrag)&lt;br /&gt;
  (third eintrag))&lt;br /&gt;
;; wer es lieber kryptisch mag, macht das so:&lt;br /&gt;
; (define teilnehmer car)&lt;br /&gt;
; (define fang cadr)&lt;br /&gt;
; (define gewicht caddr)&lt;br /&gt;
&lt;br /&gt;
;; (b) einfache Versionen von compose und curry für Leute, die&lt;br /&gt;
;;     tools.scm nicht laden wollen&lt;br /&gt;
(define (compose f g)&lt;br /&gt;
  (lambda (x)&lt;br /&gt;
    (f (g x))))&lt;br /&gt;
(define (curry f x1)&lt;br /&gt;
  (lambda (x2)&lt;br /&gt;
    (f x1 x2)))&lt;br /&gt;
&lt;br /&gt;
(define (bereinigen liste)&lt;br /&gt;
  (filter&lt;br /&gt;
   (compose (curry equal? &amp;quot;Dorsch&amp;quot;) fang)&lt;br /&gt;
   liste))&lt;br /&gt;
&lt;br /&gt;
;; das Ganze geht auch mit lambda:&lt;br /&gt;
; (define (bereinigen liste)&lt;br /&gt;
;   (filter (lambda (eintrag) (equal? (fang eintrag) &amp;quot;Dorsch&amp;quot;))&lt;br /&gt;
;           liste))&lt;br /&gt;
&lt;br /&gt;
;; Test:&lt;br /&gt;
(bereinigen *fang-tabelle*)&lt;br /&gt;
;; =&amp;gt; ((&amp;quot;Karl Kabeljau&amp;quot; &amp;quot;Dorsch&amp;quot; 8) (&amp;quot;Britta Besser&amp;quot; &amp;quot;Dorsch&amp;quot; 15.2))&lt;br /&gt;
&lt;br /&gt;
;; (c) i./ii.&lt;br /&gt;
;; Damit wir die sort-Funktion benutzen können, brauchen wir zunächst&lt;br /&gt;
;; ein paar Vergleichsprädikate, die ähnlich wie string&amp;lt;? oder &amp;lt;&lt;br /&gt;
;; funktionieren.&lt;br /&gt;
(define (teilnehmer&amp;lt;? eintrag1 eintrag2)&lt;br /&gt;
  (string&amp;lt;? (teilnehmer eintrag1)&lt;br /&gt;
            (teilnehmer eintrag2)))&lt;br /&gt;
(define (gewicht&amp;lt;? eintrag1 eintrag2)&lt;br /&gt;
  (&amp;lt; (gewicht eintrag1) (gewicht eintrag2)))&lt;br /&gt;
&lt;br /&gt;
;; DrScheme hat sort in einem Zusatzmodul, das wir erst laden müssen.&lt;br /&gt;
(require (lib &amp;quot;compat.ss&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
(define (nachTeilnehmer liste)&lt;br /&gt;
  (sort teilnehmer&amp;lt;? liste))&lt;br /&gt;
&lt;br /&gt;
(define (nachGewicht liste)&lt;br /&gt;
  (sort gewicht&amp;lt;? liste))&lt;br /&gt;
&lt;br /&gt;
;; Test:&lt;br /&gt;
(nachTeilnehmer *fang-tabelle*)&lt;br /&gt;
;; =&amp;gt; ((&amp;quot;Britta Besser&amp;quot; &amp;quot;Dorsch&amp;quot; 15.2)&lt;br /&gt;
;;     (&amp;quot;Kapitaen Ahab&amp;quot; &amp;quot;Pottwal&amp;quot; 2500)&lt;br /&gt;
;;     (&amp;quot;Karl Kabeljau&amp;quot; &amp;quot;Dorsch&amp;quot; 8)&lt;br /&gt;
;;     (&amp;quot;Marietta Mogel&amp;quot; &amp;quot;Thunfisch&amp;quot; 30)&lt;br /&gt;
;;     (&amp;quot;Paul Pechvogel&amp;quot; &amp;quot;Tauchlehrer&amp;quot; 91.6)&lt;br /&gt;
;;     (&amp;quot;Simon Sonntagsangler&amp;quot; &amp;quot;Hering&amp;quot; 1.2))&lt;br /&gt;
(nachGewicht (bereinigen *fang-tabelle*))&lt;br /&gt;
;; =&amp;gt; ((&amp;quot;Karl Kabeljau&amp;quot; &amp;quot;Dorsch&amp;quot; 8) (&amp;quot;Britta Besser&amp;quot; &amp;quot;Dorsch&amp;quot; 15.2))&lt;br /&gt;
&lt;br /&gt;
;; (c) iii.&lt;br /&gt;
(define (groesstes-gewicht liste)&lt;br /&gt;
  (apply max (map gewicht liste)))&lt;br /&gt;
&lt;br /&gt;
;; Die folgende Funktion bestimmt die Liste aller Leute, die grösste&lt;br /&gt;
;; Fische gefangen haben (es kann ja auch zwei Walfänger geben) und&lt;br /&gt;
;; gibt dann den ersten aus der Liste zurück.&lt;br /&gt;
(define (sieger-eintrag liste)&lt;br /&gt;
  (let ((maxgewicht (groesstes-gewicht liste)))&lt;br /&gt;
  (car (filter (compose (curry equal? maxgewicht) gewicht) liste))))&lt;br /&gt;
&lt;br /&gt;
;; Test:&lt;br /&gt;
(groesstes-gewicht *fang-tabelle*)&lt;br /&gt;
;; =&amp;gt; 2500&lt;br /&gt;
&lt;br /&gt;
;; (c) iv.&lt;br /&gt;
(define (mittleres-gewicht liste)&lt;br /&gt;
  (let ((gewichte (map gewicht liste)))&lt;br /&gt;
    (/ (apply + gewichte)&lt;br /&gt;
       (length gewichte))))&lt;br /&gt;
;; Test:&lt;br /&gt;
(mittleres-gewicht *fang-tabelle*)&lt;br /&gt;
;; =&amp;gt; 440.99999999999994&lt;br /&gt;
&lt;br /&gt;
;;-----------------------------------------------------------------&lt;br /&gt;
;; Aufgabe 2&lt;br /&gt;
;; (a) allgemein rekursiv:&lt;br /&gt;
(define (mymap1 f xs ys)&lt;br /&gt;
  (cond&lt;br /&gt;
    ((null? xs) ())&lt;br /&gt;
    ((null? ys) ())&lt;br /&gt;
    (else (cons (f (car xs) (car ys))&lt;br /&gt;
                (mymap1 f (cdr xs) (cdr ys))))))&lt;br /&gt;
&lt;br /&gt;
;; (b) endrekursiv:&lt;br /&gt;
(define (helper f xs ys accu)&lt;br /&gt;
  (cond&lt;br /&gt;
   ((null? xs) accu)&lt;br /&gt;
   ((null? ys) accu)&lt;br /&gt;
   (else&lt;br /&gt;
    (helper f (cdr xs) (cdr ys)&lt;br /&gt;
            (cons (f (car xs) (car ys))&lt;br /&gt;
                  accu)))))&lt;br /&gt;
&lt;br /&gt;
(define (mymap2 f xs ys)&lt;br /&gt;
  (reverse (helper f xs ys ())))&lt;br /&gt;
&lt;br /&gt;
;; (c) mymap2 ist effizienter, weil nur Endrekursionen benutzt werden.&lt;br /&gt;
;; Der zusätzliche Aufruf von reverse ist notwendig, weil Listen über&lt;br /&gt;
;; Endrekursion nur rückwärts bearbeitet/ausgegeben werden können;&lt;br /&gt;
;; allerdings läßt sich dieses reverse daher wieder mit einer trivialen&lt;br /&gt;
;; Endrekursion erledigen, und zwei aufeinanderfolgende Endrekursionen&lt;br /&gt;
;; sind immer noch als effizienter anzusehen als eine allgemeine&lt;br /&gt;
;; Rekursion.  mymap1 mag allerdings trotzdem für kleine Listen&lt;br /&gt;
;; schneller sein, und ist zudem lesbarer.&lt;br /&gt;
&lt;br /&gt;
;; Endrekursion bedeutet, daß der Rekursionsaufruf als allerletztes in&lt;br /&gt;
;; der Funktion passiert (vgl. &amp;quot;tail context / tail recursion&amp;quot; im&lt;br /&gt;
;; R5RS, Abschnitt 3.5, Seite 7) und ist deswegen effizienter, weil es&lt;br /&gt;
;; bei einem solchen Aufruf nicht mehr notwendig ist, den aktuellen&lt;br /&gt;
;; Zustand der aufrufenden Funktion zu sichern.  Normalerweise müßten&lt;br /&gt;
;; z.B. lokale Variablenbelegungen auf dem Stack gesichert werden,&lt;br /&gt;
;; aber in diesem Fall kann dies unterlassen werden, weil die Vari-&lt;br /&gt;
;; ablen eh nicht mehr verwendet werden (können).  Im Gegensatz zu&lt;br /&gt;
;; anderen Lisp-Varianten kann man sich bei Scheme sogar darauf&lt;br /&gt;
;; verlassen, daß diese Optimierung geschieht, weil der R5RS dieses&lt;br /&gt;
;; verlangt.  Der Unterschied zwischen Endrekursion und allgemeiner&lt;br /&gt;
;; Rekursion wird in imperativen Programmiersprachen üblicherweise&lt;br /&gt;
;; vernachlässigt, weil man dort statt Endrekursion Schleifen-&lt;br /&gt;
;; konstrukte (wie z.B. &amp;quot;for&amp;quot; oder &amp;quot;while&amp;quot;) verwenden kann.&lt;br /&gt;
&lt;br /&gt;
;;-----------------------------------------------------------------&lt;br /&gt;
;; Aufgabe 3&lt;br /&gt;
;; (a) &lt;br /&gt;
;; In dieser Aufgabendefinition liegt eine indirekt geschachtelte Baumrekursion vor.&lt;br /&gt;
&lt;br /&gt;
;; (b) &lt;br /&gt;
&lt;br /&gt;
(define *fg (/ 1 51))&lt;br /&gt;
(define *fs (/ 1 153))&lt;br /&gt;
(define *f0 2001)&lt;br /&gt;
(define *pf0 6120000000)&lt;br /&gt;
&lt;br /&gt;
(define (p j)&lt;br /&gt;
  (cond ((eq? j *f0) *pf0)&lt;br /&gt;
        ((&amp;gt; j *f0) (+ (p (- j 1)) (- (g (- j 1)) (s (- j 1)))))&lt;br /&gt;
        ((&amp;lt; j *f0) (- (p (+ j 1)) (- (g (+ j 1)) (s (+ j 1)))))))&lt;br /&gt;
&lt;br /&gt;
(define (g j)&lt;br /&gt;
  (* *fg (p j)))&lt;br /&gt;
&lt;br /&gt;
(define (s j)&lt;br /&gt;
  (* *fs (p j)))&lt;br /&gt;
&lt;br /&gt;
;; (c) P(J-1) steht jeweils in den Formeln für P(J), G(J-1), S(J-1).&lt;br /&gt;
;;     Bei naiver Berechnung ergibt sich eine Baumrekursion mit einem&lt;br /&gt;
;;     Verzweigungsfaktor von 3 (also ziemlich schlimm).&lt;br /&gt;
;;     Setzt man die Gleichungen für G(J-1) und S(J-1) in die für P(J)&lt;br /&gt;
;;     ein, so bekommt man eine einfachere Rekursionsgleichung:&lt;br /&gt;
&lt;br /&gt;
(define (pop j j0 p0 fg fs)&lt;br /&gt;
  (if (= j j0) p0&lt;br /&gt;
      (pop j (+ j 1)&lt;br /&gt;
           (* p0 (+ 1 fg (- fs)))&lt;br /&gt;
           fg fs)))&lt;br /&gt;
&lt;br /&gt;
;;-----------------------------------------------------------------&lt;br /&gt;
;; Aufgabe 4&lt;br /&gt;
(define (andere von nach)&lt;br /&gt;
  (modulo (- 6 von nach) 3))&lt;br /&gt;
&lt;br /&gt;
(define (scheiben von nach wieviele)&lt;br /&gt;
  (if (= wieviele 0) ()&lt;br /&gt;
      (append&lt;br /&gt;
       (scheiben von (andere von nach) (- wieviele 1))&lt;br /&gt;
       (list (list &amp;#039;Scheibe wieviele &amp;#039;von von &amp;#039;nach nach))&lt;br /&gt;
       (scheiben (andere von nach) nach (- wieviele 1)))))&lt;br /&gt;
&lt;br /&gt;
;; Behauptung:&lt;br /&gt;
;;   Unter der Annahme, dass die Scheiben bis zur Dicke &amp;lt;wieviele&amp;gt; auf&lt;br /&gt;
;;   dem Stab &amp;lt;von&amp;gt; liegen, führt die Anweisungsfolge dazu, dass die&lt;br /&gt;
;;   Scheiben bis zur Dicke &amp;lt;wieviele&amp;gt; auf dem Stab &amp;lt;nach&amp;gt; liegen.&lt;br /&gt;
;;   Andere Scheiben mit einer grösseren Dicke werden nicht bewegt.&lt;br /&gt;
;; Beweis:&lt;br /&gt;
;;   Für n=0 braucht man nichts zu tun.&lt;br /&gt;
;;   Angenommen, die Scheiben bis zur Dicke &amp;lt;wieviele&amp;gt; liegen auf dem&lt;br /&gt;
;;   Stab &amp;lt;von&amp;gt;. Wir können nun die Scheiben bis zur Dicke&lt;br /&gt;
;;   &amp;lt;wieviele&amp;gt;-1 auf den anderen (d.h. nicht &amp;lt;von&amp;gt; oder &amp;lt;nach&amp;gt;) Stab&lt;br /&gt;
;;   verschieben (Induktionsannahme). Dann können wir die Scheibe der&lt;br /&gt;
;;   Dicke &amp;lt;wieviele&amp;gt; auf den Stab &amp;lt;nach&amp;gt; verschieben (den die&lt;br /&gt;
;;   Scheiben mit kleinerer Dicke sind alle auf dem anderen Stab), und&lt;br /&gt;
;;   dann die Scheiben mit kleinerer Dicke auf den &amp;lt;nach&amp;gt;-Stab&lt;br /&gt;
;;   verschieben (Induktionsannahme).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>fsrwiki_&gt;1illig</name></author>
	</entry>
</feed>