Klausur März 2005


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.


hmmm… ich versteh das zeug einfach nicht :frowning:

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:

[code]X = [1, 2] ;

X = [1, 2, []] ;

X = [1, [2]] ;

X = [[1, 2]] ;
[/code]


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.


vielleicht:

(define (insert-all-lists  symbol listen)
  (let help ((lyst listen))
    (cond ((null? lyst) '())
          (else (append (insertall symbol (car lyst)) (help (cdr lyst))))))
  )

So ein inneres define kannst du mit einen named let loswerden, sieht aber auch nicht sehr viel anders aus.


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?


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.


Lol, 2 Tage später: Ja, es war dran…