Not logged in. · Lost password · Register

Page:  previous  1  2 
andy
your local λ-dealer
Member since Oct 2005
248 posts
In reply to post ID 36822
Quote by bRownY:
(define (insert-all symbol liste)
        (define (build list n)
                (cond ((zero? n) list)
                (else (build (cons (insert symbol liste n) list) (- n 1))))
        )
        (build '() (+ 1 (length liste)))
)
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))))

Quote by bRownY:
(define (insert-all-lists symbol listen)
        (define (build list lists n)
                (cond ((zero? n) list)
                (else (build (append list (insert-all symbol (car lists)))
                        (cdr lists) (- n 1))))
        )
        (build '() listen (length listen))
)
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!"
This post was edited on 2006-09-15, 20:20 by andy.
vielleicht
Philipp Caliebe
Member since Oct 2005
259 posts
Quote by andy:
Quote by bRownY:
(define (insert-all-lists symbol listen)
        (define (build list lists n)
                (cond ((zero? n) list)
                (else (build (append list (insert-all symbol (car lists)))
                        (cdr lists) (- n 1))))
        )
        (build '() listen (length listen))
)
Hier wärs besonders leicht mit map:
(define (insert-all-lists symbol lists)
  (apply append (map (lambda (l) (insert-all sym l)) lists)))

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*
bRownY
Undefined
Avatar
Member since Nov 2005
601 posts
In reply to post ID 36824
Quote by vielleicht:
Was mich eigentlich daran noch stört sind die defines... Wie macht man das ohne, weil ich finde sieht net schick aus...

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 :)  ...  will ja hier etz erst mal kein scheme opt-code coder werden  ;-)
"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
bRownY
Undefined
Avatar
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 :) aber vll reichts ja fuer 50%, und wenn nicht, gibt ja noch nen versuch  :*)

[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
This post was edited on 2006-09-15, 20:55 by bRownY.
andy
your local λ-dealer
Member since Oct 2005
248 posts
Was mich eigentlich daran noch stört sind die defines... Wie macht man das ohne, weil ich finde sieht net schick aus...
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!"
bRownY
Undefined
Avatar
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
andy
your local λ-dealer
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!"
This post was edited 2 times, last on 2006-09-16, 19:38 by andy.
chrham
Member since Oct 2005
208 posts
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.
Comrade
THI-Survivor
Avatar
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..."
andy
your local λ-dealer
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!"
vielleicht
Philipp Caliebe
Member since Oct 2005
259 posts
Lol, 2 Tage später: Ja, es war dran...
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Page:  previous  1  2 
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen