FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Heisse Tipps ?

Heisse Tipps ? 2003-02-16 20:03
Anonymer User
mahlzeit.

hat noch irgendwer heisse Tipps auf Lager wie man zumindest die 50% erreichen könnte ? Schwerpunkte ? "Muss" ?
(define (me) (hosen-gestrichen-voll)) :-)

4 gewinnt !

Re: Heisse Tipps ? 2003-02-16 20:36
Dennis
Geht es hier um P1 oder P2/P3?

Re: Heisse Tipps ? 2003-02-16 20:44
Slater
peinlich Dennis, das ist doch scheme ;)

tipps: übungsaufgaben können, muster erkennen

Re: Heisse Tipps ? 2003-02-16 20:47
Dennis
Oops, da habe ich doch glatt nicht richtig gelesen. [img]http://www.fb18.de/gfx/16.gif[/img]

Na gut, man sollte ausserdem, falls vorhanden, die Probeklausur beherrschen, aber sich nicht allzusehr darauf verlassen, denn letztes mal war die Klausur um einiges schwerer als die Probeklausur.



Re: Heisse Tipps ? 2003-02-16 20:53
Anonymer User
P1, prolog & Scheme ( dachte ds erkennt man am Ausdruck ??? :-)

Re: Heisse Tipps ? 2003-02-16 20:56
Anonymer User
jaja, ich weiß, die Erfahrung hab ich letztes Jahr schon gemacht :-( Erzählt mir bitte was neues. Vor allem die Leutz die Leonie dieses Semster hatten, hat sie was von sich gegeben was ihre Fav's sind in der Prüfung ? Welche Aufgabenzettel man auf jeden können müsste, welche egal sind und was im Leben wirklich zählt !

Your turn !

Re: Heisse Tipps ? 2003-02-16 21:17
Slater
na das wird dieses jahr nicht anders sein als letztes,
hast du da die klausur gesehen?,
es geht immer um das gleiche, ich sag nur 'funktionen höherer ordnung' das wird noch ewig nachhallen,

und sonst all die grossen themen im skript, die eigene überschriften haben,

hier steht noch eine schöne übersicht:

http://3773.rapidforum.com/topic=101785458641&search=&reverse=0?



Re: Heisse Tipps ? 2003-02-16 22:07
xeen9
Ich hab noch diesen Link in einem alten Posting gefunden!
Übungsaufgaben von WS 2000/2001

http://web.archive.org/web/20010611073628/kogs-www.informatik.uni-hamburg.de/~klug/p1/aufgaben.html

SK

PS. und noch mehr gute Aufgaben:
http://www.kbs.uni-hannover.de/Lehre/KI1/WS02/Uebung/uebung.html


Re: Heisse Tipps ? 2003-02-17 10:36
Anonymer User
Hey!!! Hier im RRZ funktioniert der erste Link ploetzlich nicht mehr!!! Wer hat da rumgefuscht??? Waren da vielleicht ein paar Klausuraufgaben dabei???

SK

Re: Heisse Tipps ? 2003-02-17 10:57
Slater
hier in kiwittsmoor geht er noch ;)

Re: Heisse Tipps ? 2003-02-17 11:24
Anonymer User
Ok, alles klar, es liegt am Konqueror Browser…



Re: Heisse Tipps ? 2003-02-17 11:37
Frischling
Also ich bereit mich so auf die Klausur vor, dass ich die Probeklausur mache, alles aufschreibe und mit in die Klausur nehme (die Musterlösung zur Probeklausur, die auch im Forum zu finden ist, ist leider an einigen stellen zu ungenau (z.B. bei End-, Baum- und leniar Rekursion)).

Post-it's beschriften und in die Skripts (quasi als handliches Index).

Die Musterlösungen zu den Übungsaufgaben bearbeite ich und druck nur das aus, was ich nicht im Kopf hab.

Eine einseitige, übersichtliche Auflistung einmal für Scheme, eimal für Prolog mit den für mich wichtigsten Fakten, wird wohl das Hauptmaterial für mich sein. Wir haben ja nicht soviel Zeit, um alles im Skript nach zu schauen und zu lesen.

Also am besten die Skripte nochmal durchlesen, eine Zusammenfassung mit den wichtigsten Fakten zusammenstellen (die kann man dann in der Klausur neben sich packen und evtl. mal drauf schielen, damit man die Semantik von Prolog und Scheme vor Panik nicht durcheinander bringt).

Dann müsste das wohl klappen,
wünsche allen viel Glück
und keinen Hals- und Beinbruch
LG Frischling



Re: Heisse Tipps ? 2003-02-17 14:15
zaster-laster
EBNF iss wichtig!

Re: Heisse Tipps ? 2003-02-17 18:11
Anonymer User
Hallo,

kann mir jemand genau sagen, was im Scheme die Zahle:
(reduce* '(1 2 6 0 1) 1) => 0
tut???

Ich habe das niergendwo im Skript gefunden.

Danke!

Re: Heisse Tipps ? 2003-02-17 18:14
nightfly
das dingen multipliziert die elemente der liste miteinander und zum schluss (oder am anfang) noch die 1 dazu. weil in der liste der wert 0 einmal vorkommt und x*0=0, evaluiert auch dein ausdruck zu 0.

Re: Heisse Tipps ? 2003-02-17 18:16
Anonymer User
Kann jemand nochmal schnell den link zur Lösung der Musterklausur posten? Danke

Re: Heisse Tipps ? 2003-02-17 18:48
Anonymer User
nochmal zu reduce :

würde das Ganze (reduce* '(1 2 6 4 1) 2) heissen, würde dann 96 bei rauskommen ??? Wo ist denn da der Sinn an der Funktion ? Da reicht doch im prinzip ne einfach Multiplikation aus, braucht man doch kein reduce !? Piss-Sprache !!!

Und wer kann mir bitte in verständlichen klaren Sätzen erklären was curry genau macht ??? Und was zur Hölle ist rcurry ? Siehe script.

Wenn das morgen klappt gibts nen Gang-Bang mit Leonie :-) Uäääh

Re: Heisse Tipps ? 2003-02-17 18:56
TriPhoenix
würde das Ganze (reduce* '(1 2 6 4 1) 2) heissen, würde dann 96 bei rauskommen ??? Wo ist denn da der Sinn an der Funktion ? Da reicht doch im prinzip ne einfach Multiplikation aus, braucht man doch kein reduce !? Piss-Sprache !!!

Jap, sieht gut aus mit der 96. Man braucht sehr wohl ein Reduce, denn im allgemeinen hast du eine Liste mit variabler Länge in einem Programm. Für diese zahlen ginge es auhc ohne, aber in richtigen Programmen wo du z.B. eine variabel Lange Liste aufaddieren sollst, gehts ohne reduce net.

Re: Heisse Tipps ? 2003-02-17 19:55
Anonymer User
hmm, ginge aber auch mit apply, nichtwahr?
(apply * '(1 2 3 4)) == (reduce * '(1 2 3 4) 1) …

Re: Heisse Tipps ? 2003-02-17 21:36
tekai
wann braucht man reduce?
1. man nehme eine zweistellige funktion, die zu einem werte aus demselben werteraum wie die beiden argumente evaluiert
2. man probiere (reduce funktion '(liste mit werten) neutraler_wert) und (apply funktion '(liste mit werten)) aus.

ergebnis: da die funktion nur zweistellig ist schlägt apply fehl während reduce ein ergebnis liefert

natürlich ist reduce mit + kein sonderlich gutes beispiel für den sinn von reduce.

Re: Heisse Tipps ? 2003-02-17 22:01
Anonymer User
Der Unterschied zwischen apply und reduce, so wie ich ihn verstehe:

apply uebergibt der Funktion in EINEM Aufruf ALLE Listenelemente als argumente/parameter.

(apply * '(1 2 3 4)) funktioniert also, denn das * nimmt beliebig viele argumente.

Wenn Du dir allerdings (define (mult a b) (* a b)) definierst, und dann (apply mult '(1 2 3 4)) aufrufst, bekommst du einen fehler, denn mult erwartet zwei argumente, bekommt aber vier.

reduce hingegen nimmt den seed (diese Zahl da hinten dran, meist das neutrale Element fuer die jeweilige Operation) sowie das erste Listenelement und ueberreicht es der Funktion. Die berechnet einen Wert. Diesen Wert nimmt reduce wieder und schnappt sich den naechsten Wert aus der Liste, wendet diese Funktion wieder an. Der errechnete Wert plus das naechste Element werden wieder der Funktion uebergeben. Das passiert, bis die Liste leer ist.

Apply ruft die Funktion nur einemal auf, reduce entsprechend der Listenlaenge unterschiedlich oft.

Kann mir bitte jemand kurz (aber vor allem verstaendlich) darlegen, was bezugstransparenz und closure ist?

danke,
kernelpanic


Re: Heisse Tipps ? 2003-02-17 22:08
Zaphod
2. man probiere (reduce funktion '(liste mit werten) neutraler_wert) und (apply funktion '(liste mit werten)) aus.
Du setzt gerade voraus, dass es zu jeder Funktion einen neutralen Wert gibt. Das ist nicht immer der Fall.

Re: Heisse Tipps ? 2003-02-18 03:09
Cyrax
Bezugstransparenz bedeutet, das innerhalb einer Werteumgebung der Bezeichner (damit der Ausdruck) stets für den selben Wert steht. Bedeutet eigentlich auch referentielle Transparenz. Daher macht es keinen Sinn eine Funktion, die 2 Zahlen addiert, Logarithmus zu nennen, weil das total irreführend ist.
Genauso ist es unschön, Variablen, die vielleicht noch für weiter Operationen benötigt werden einfach nur a,b,c zu nennen. Die Bezugstransparenz geht einfach verloren zu dem was wir natürlichsprachlich damit verbinden.

Closure:
Naja bei Scheme könnte ich mir vorstellen, das es ähnlich wie bei Perl eine spezielle Art von anonymen Funktionen sind, die den Wert von lokalen Variablen während ihrer Definition beibehalten. Im Klartext bedeutet das, dass du zwar ein einem bestimmten "lokalen" Namensraum eine Funktion schreibst, die du eigentlich nur über diesen Namensraum bereitstellen möchtest, trotzdem noch existiert, auch wenn du sie an anderer Stelle aufrufen willst. Bei Scheme ist das etwas schwer zu erklären.

Beispiel:
(define f (lambda (x) (let (y 10) (lambda (z) (+ x y z))))) (define g (f 5)) z ist hier z.B. eine gebundene Variable, x,y dagegen frei (bei lambda (z) (+ x y z)!!)
Die Prozedur f ist geschlossen in ihrer Deklarationsumgebung.

Wenn man es so sehen will: An Sachen die dich zu dem machen was du bist, bist du gebunden. Und diese Dinge bilden eine Hülle. Und du bist innerhalb dieser Hülle definiert und besitzt dadurch einen geschlossenen Definitionsraum (Closure). Verstanden? Ich hoffe ich hab das einigermaßen auf den Punkt getroffen [img]http://www.fb18.de/gfx/8.gif[/img]


Re: Heisse Tipps ? 2003-02-18 16:17
MoKrates
Wenn man es so sehen will: An Sachen die dich zu dem machen was du bist, bist du gebunden. Und diese Dinge bilden eine Hülle. Und du bist innerhalb dieser Hülle definiert und besitzt dadurch einen geschlossenen Definitionsraum (Closure). Verstanden? Ich hoffe ich hab das einigermaßen auf den Punkt getroffen

Ja, doch. Einigermassen. Beim "Let" hast Du 2 Klammern vergessen, es haette (let ((y 10)) …) heissen muessen, und bei der Refernziellen Transparenz wuerde ich gerne anmerken, dass das nix mit unserer natuerlichen Sprache zu tun hat.

Du erklaerst es dadurch, dass Variablen einmal gebunden werden, und ihren Wert dann nicht mehr veraendern.
Ich hatte es so verstanden, dass es zB fuer eine Funktion egal ist, woher die Parameter kommen. Ob ich (+ 3 4) schreibe, oder (+ (sqrt 9) (sqrt 16)), es liefert nicht nur dasselbe Ergebnis, sondern '+' wird sogar identisch ausgewertet.

MoKrates

Re: Heisse Tipps ? 2003-02-18 17:54
Anonymer User
Eine immer wiederkehrende Operation auf Listen ist, dass man etwas der reihe Nach mit den Elementen der Liste und einem Zwischenergebnis der bisherigen Operationen macht. Diese Operation wird durch reduce abstrahiert.

(define (max a b) (if (> a b) a b)) (reduce max (cdr lis) (car lis))
Ich finde es etwas schade wenn man wegen solcher features eine Sprache gleich als "pisssprache" bezeichnet - das zeugt nämlich davon, dass man weder P1, noch Scheme, noch Informatik verstanden hat.