Member since Oct 2005
248 posts
|
![]()
In reply to post ID 36822
Baust dir deine map-Struktur unnötigerweise selber, aber wenigstens nicht sonderlich ineffizient. Übrigens gilt hier das gleiche wie oben: du musst nicht immer nen Akkumulationsargument mitschleppen das du tailrec kriegst, das ist so auf bestimmten Implementierungen sogar langsamer als die normale Variante. :> Hier mal für nullbasiertes insert: (define (enumFromTo a b) (cond ((> a b) '()) (else (cons a (enumFromTo (+ a 1) b))))) (define (insert-all sym l) (map (lambda (n) (insert sym n l)) (enumFromTo 0 (length l)))) Hier wärs besonders leicht mit map: (define (insert-all-lists sym lists)
(apply append (map (lambda (l) (insert-all sym l)) lists))) |
"Destroy your lucrative career as a Java programmer: Learn Haskell!"
|
Member since Oct 2005
259 posts
|
![]()
Hatte ich auch so in etwa (weiß jetzt nimmer wie ichs genau hatte), nur irgendwie sah dann die Liste, die am Ende raus kam net so aus, wie sie aussehen sollte! Aber vielleicht hatte ich auch nen Denkfehler drin. Zumindest hatte ich den Gedanken mit dem map *g* |
![]()
Member since Nov 2005
601 posts
|
![]()
In reply to post ID 36824
ich finde die defines im define etz au ned grad so toll, aber ich machs lieber so auch in der klausur ^^ weil dann muss ich ned vorher um 10 ecken denken, un mach hoffentlich so au weniger fehler ![]() ![]() |
"Da geht er hin, einer von Gottes eigenen Prototypen - ein aufgemotzter Mutant, der nie zur Massenproduktion in Betracht gezogen wurde: zu spleenig zum Leben und zu selten zum Sterben."
Hunter S. Thompson |
![]()
Member since Nov 2005
601 posts
|
![]()
sorry jungs, aber den map befehl hat ich noch nicht angeschaut :red: ^^ wird scho bissl knapp das alles bis montag
![]() ![]() [edit: ] und sorry fuer doppelpost |
"Da geht er hin, einer von Gottes eigenen Prototypen - ein aufgemotzter Mutant, der nie zur Massenproduktion in Betracht gezogen wurde: zu spleenig zum Leben und zu selten zum Sterben."
Hunter S. Thompson |
Member since Oct 2005
248 posts
|
![]() Na mit letrec, aber kommt eigentlich aufs gleiche raus. Meistens werden innere defines auch in ein letrec* umgewandelt, dh verschachtelte letrecs, damit man die sequentielle Semantik hinbekommt. |
"Destroy your lucrative career as a Java programmer: Learn Haskell!"
|
![]()
Member since Nov 2005
601 posts
|
![]()
hmmm... ich versteh das zeug einfach nicht
![]() wenn ich habe unk([], []). unk([H|T], L) :- unk(H, A), unk(T, B), append(A, B, L). unk(X, [X]) und etz ?- unk([1,2],X). eingebe .... dann geht er doch die regeln durch ... erste passt nicht, deswegen 2te ... da macht er dann unk(1,A) => A=[1] und unk(2,B) => B=[2], und dann append([1],[2],L) => L = [1,2] und dann ?! also der interpreter spuckt zumindest das raus:X = [1, 2] ;
X = [1, 2, []] ; X = [1, [2]] ; X = [[1, 2]] ; |
"Da geht er hin, einer von Gottes eigenen Prototypen - ein aufgemotzter Mutant, der nie zur Massenproduktion in Betracht gezogen wurde: zu spleenig zum Leben und zu selten zum Sterben."
Hunter S. Thompson |
Member since Oct 2005
248 posts
|
![]()
Na wenn du mehr Ergebnisse willst geht er ab dem nächsten Choicepoint weiter, also hier in die 3. Regel rein. Die geht ja ehh auf alles...
Deswegen wäre hier nen cut in der 2. Regel sinnvoll. unk soll ja wohl sowieso ne flatten-FUNKTION und kein Prädikat sein, also verändert das auch nicht die gewollte Semantik. Prädikat wäre hier auch wenig sinnvoll weil es zu ner verschachtelten Liste ja nur eine mögliche flachgeklopfte gibt. Wenn man trotzdem nicht mit cuts arbeiten will, müsste man ne Art not(pair(X)) in die 3. Regel einbauen, wobei pair einfach die Regel pair([H|T]) wäre. Bei solchen Geschichten ist es immer wichtig zu schauen wie sich die Regelköpfe zueinander verhalten. |
"Destroy your lucrative career as a Java programmer: Learn Haskell!"
|
Member since Oct 2005
208 posts
|
![]()
vielleicht:
(define (insert-all-lists symbol listen) So ein inneres define kannst du mit einen named let loswerden, sieht aber auch nicht sehr viel anders aus.
(let help ((lyst listen)) (cond ((null? lyst) '()) (else (append (insertall symbol (car lyst)) (help (cdr lyst)))))) ) |
![]()
Member since Nov 2005
623 posts
|
![]()
Ich moechte mal anmerken ...vom Schwierigigkeitsgrad sind diese beiden alten Klausuren teilweise gar nicht so ohne...
Schon diese paar insert Funktion kann man im Pruefungsgefecht leicht verhauen. Muessen wir eigentlich so was wie Aufgabe 7 wissen,mit dem Verfahren zur Objektorientierung in Scheme? |
"My uzi weighs a ton..."
|
Member since Oct 2005
248 posts
|
![]()
War das in der Vorlesung dran? :>
Dann könnte es natürlich sein, aber schätze eher nicht wenn er die 60 Min ausnutzen will. |
"Destroy your lucrative career as a Java programmer: Learn Haskell!"
|
Member since Oct 2005
259 posts
|
![]()
Lol, 2 Tage später: Ja, es war dran...
|
Datenschutz |
Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev,
© 2003-2011 by Yves Goergen