FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

[SE3-FP] Klausuraufgabe?

[SE3-FP] Klausuraufgabe? 2007-02-19 14:50
Hackbert
Lustig, was mit Scheme so alles geht:
((lambda () (max (+ (+) (*) (*) (`,*) (`,(eval '+))))))

Wird sicher 'ne Klausuraufgabe :P

Re: [SE3-FP] Klausuraufgabe? 2007-02-19 14:56
f0k
Mal so für die nicht-Schemer: Was macht das?

Re: [SE3-FP] Klausuraufgabe? 2007-02-19 15:58
matten
das max vom 3 finden:
(+) evaluiert zu 0, (*) evaluiert zu 1, also jeweils zum neutralen element. (',*) ist quote + unqote + *, also das gleiche wie (*). (',(eval '+)) ist das gleiche wie (eval '+) und das evaluiert zu (+), bevor es an die übergeordnete funktion + gegeben wird (klammerung beachten). die funktion max bekommt als einziges argument den wert 3 übergeben, und das lambda definiert eine anonyme funktion, die demnach hier immer 3 zurückgibt.

Re: [SE3-FP] Klausuraufgabe? 2007-02-19 16:13
garou
… Aua. Indentieren wir das erstmal:
((lambda () (max (+ (+) (*) (*) (`,*) (`,(eval '+)))))) Wir bauen uns also eine unbenannte Funktion mit 0 Argumenten, die wir dann auch noch aufrufen. Diese Funktion bestimmt, welches ihrer einen Argumente das größte ist (haha), und dieses ist die Summe der fünf… Naja, ihr seht's ja. (+) => 0 und (*) => 1 (ihr wißt ja, neutrales Element und so), was (',*) bedeutet, ist mir gerade nicht klar, aber Scheme48 sagt, das ist 1. (eval '+) bzw. (`,(eval '+)) sind aber wohl keine gültigen Ausdrücke:
> (`,(eval '+)) Error: wrong number of arguments ('#{Procedure 4615 (eval in evaluation)} '+)
Dennoch entgeht mir, was dieser code zeigen soll, außer daß man auch in Scheme unleserlichen code schreiben kann. Falls das der Sinn der Übung gewesen sein sollte, tu' mal lieber das in dein Pfeifchen:
((lambda (lambda) (lambda lambda)) (lambda (lambda) (lambda))

Re: [SE3-FP] Klausuraufgabe? 2007-02-19 16:14
matten
Deswegen glaub ich auch nicht, dass es in der Klausur dran kommt: DrScheme wird in diesem Semester zum ersten mal benutzt und erlaubt wohl mehr, als der alte Scheme-Interpreter. Unter DrScheme ist die o.a. syntax in ordnung!

Re: [SE3-FP] Klausuraufgabe? 2007-02-19 16:18
garou
DrScheme wird in diesem Semester zum ersten mal benutzt
DrScheme wurde schon benutzt, als ich selber noch ein Erstsemestler war.

und erlaubt wohl mehr, als der alte Scheme-Interpreter.
Welcher "alte" Interpreter? Ich hoffe, du meinst nicht Scheme48… :p Albernativ kann ich es auch nochmal mit Gambut-C probieren, hätten sie's gerne interpretiert oder compiled? :)

Re: [SE3-FP] Klausuraufgabe? 2007-02-19 16:37
matten
das war zumindest das, was uns unser tutor erzählt hat ;)

Re: [SE3-FP] Klausuraufgabe? 2007-02-19 16:47
Anarch
was (',*) bedeutet, ist mir gerade nicht klar,

Das müsste (`,*) sein, also ((quasiquote (unquote *))), was (*) ist (quasiquote würde das Argument quoten, unquote setzt das quoting aus, also passiert nichts – `, ist ein no-op).

(eval '+) bzw. (`,(eval '+)) sind aber wohl keine gültigen Ausdrücke:

Das sind beides keine R5RS-konformen Ausdrücke, da EVAL ein environment als zweites Argument bekommt. Es gibt Scheme-Implementationen, in denen dieses zweite Argument optional ist, und durch das „aktuelle“ Environment ersetzt wird (was sehr hässlich zu implementieren ist, wenn man auch nur minimal auf Performance setzt).

Daher:

((eval '+)) => (+) => 0 (`,(eval '+)) => (+) => 0
Dennoch entgeht mir, was dieser code zeigen soll, außer daß man auch in Scheme unleserlichen code schreiben kann. Falls das der Sinn der Übung gewesen sein sollte, tu' mal lieber das in dein Pfeifchen:
((lambda (lambda) (lambda lambda)) (lambda (lambda) (lambda))

He! Das ist MEIN Lieblingscode! Außerdem hast du eine schließende Klammer am Ende vergessen. Das sieht man doch.

Die Fragen dazu:

– Was tut das?

– Warum tut es das? (Es hilft beim Verständnis, einige Bezeichner umzuschreiben)

– Wieso darf man LAMBDA so verwenden?


Wo wir bei obfuscated Scheme code sind:

guile -c '(define c call-with-current-continuation)(define(f s)(lambda(o)(let ((n(c(lambda(x)(o x)x))))(let p((n n)(l(string->list s)))(cond((not (null? l) )(display(car l))(p(c n)(cdr l))))))))((f"Js nte ul akr")(f"utAohrGieHce\n"))' — .sig of Maciej Stachowiak <[url=mailto:mstachow@mit.edu]mstachow@mit.edu[/url]>
oder andere lustige Codefragmente von http://community.schemewiki.org/?obfuscated-scheme

Welcher "alte" Interpreter?

Früher wurde SCM benutzt. Göttinseindank ist das nicht mehr der Fall. DrScheme erlaubt je nach language mode mehr oder weniger, teilweise auch nicht R5RS-konformen code. SCM implementiert recht viele Erweiterung zu Scheme, die man meist gar nicht haben will. ;-)

Re: [SE3-FP] Klausuraufgabe? 2007-02-19 20:56
georg
((lambda (lambda) (lambda lambda)) (lambda (lambda) (lambda))

Meintest du vielleicht

((lambda (lambda) (lambda lambda)) (lambda (lambda) (lambda lambda)))(ein lambda neben dem letzten lambda mehr, und die Klammer für Anarch [img]http://www.fb18.de/gfx/23.gif[/img])?
Dann kommt nämlich nicht nur ein Fehler, und symmetrischer ists auch noch [img]http://www.fb18.de/gfx/28.gif[/img]

Re: [SE3-FP] Klausuraufgabe? 2007-02-20 03:25
Anonymer User
Meintest du vielleicht

((lambda (lambda) (lambda lambda)) (lambda (lambda) (lambda lambda)))

Ja, meint er. Peinlich, dass ich das nicht gesehen habe…

Re: [SE3-FP] Klausuraufgabe? 2007-02-20 17:15
Hackbert
… Aua. Indentieren wir das erstmal:
Naja, das Indentieren habe ich vorher bewusst weggelassen, damit es noch unleserlicher wird.

…aber Scheme48 sagt, das ist 1. (eval '+) bzw. (`,(eval '+)) sind aber wohl keine gültigen Ausdrücke
Sorry, ich hätte mal DrScheme/Full swindle drüber schreiben sollen.

Dennoch entgeht mir, was dieser code zeigen soll, außer daß man auch in Scheme unleserlichen code schreiben kann.
Hey, Du hast es erkannt :D

Falls das der Sinn der Übung gewesen sein sollte, tu' mal lieber das in dein Pfeifchen:
((lambda (lambda) (lambda lambda)) (lambda (lambda) (lambda))
Nee, das (die korrigierte Variante s.o.) terminiert ja nicht. Das ist doch langweilig. Sieht aber schick aus…

Re: [SE3-FP] Klausuraufgabe? 2007-02-25 14:04
MB
wenn jmd weiss, ob die se3 ergebnisse zu sehen sind, dann kann man das hier ja posten. wäre top.

Re: [SE3-FP] Klausuraufgabe? 2007-02-25 14:28
Viprex
ACHTUNG: ES HANDELT SICH UM DIE LOGIK ERGEBNISSE!!!!!

Zumindest die Ergebnisse für SE3 Logik sind zu sehen. Ich missbrauche diesen Fred mal dafür und poste die Statistik dazu:

Noten 1,0 1,3 1,7 2,0 2,3 2,7 3,0 3,3 3,7 4,0 5,0
2 — 2 — 1 — 1 1 — — 3
Durchschnitt: 2,9
Vorliegende Ergebnisse: 10

Nicht wirklich überragend. Habe nicht bestanden, wie "gewünscht" ;-)


ACHTUNG: ES HANDELT SICH UM DIE LOGIK ERGEBNISSE!!!!!

Re: [SE3-FP] Klausuraufgabe? 2007-02-25 14:35
MB
die ergbenisse für funktionale programmierung sind auch drin.

<Ohne Gewähr!>
Statistik:
1,0: 4
1,3: 6
1,7: 7
2,0: 1
2,3: 5
2,7: 2
3,0: 2
3,3: 1
3,7: 1
5,0: 13

Durchschnitt: 2,9
Vorliegende Ergebnisse: 42
<Ohne Gewähr!>

Re: [SE3-FP] Klausuraufgabe? 2007-02-25 15:15
Anonymer User
Wo drin ?

Re: [SE3-FP] Klausuraufgabe? 2007-02-25 15:22
Anonymer User
Achso, bei der Stine…. das hätte ich nicht gedacht…