HA2 - 6.1

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Also ich hab das jetzt mit eq? probiert, aber bei mir gibt es jetzt immer bei Zahlen false aus... also er meint, das es eine leere Liste ist...

Aber mit Buchstaben funktioniert es?
:roll:

Wäre nett, wenn mir vielleicht mal jemand helfen könnte...
Ich sitze jetzt seit 2 Stunden da, weil der meine Zahlen nicht will

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Beitrag von Osterlaus »

Gib ein bisschen mehr Quellcode her, dann können wir mal drüberschaun. Bei mir gehts mit eq? auf jeden Fall.

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Mit dem Quellcode ist ziemlich fraglich, da ich nicht weiß, ob ich den hier so einfach reinschreiben kann...
Aber ich versuche es mal auf das wichtigste zu reduzieren:

Code: Alles auswählen

[(eq? (first a-ele) (first alphabet_complete)) #t]
            [else (element_of? (rest a-ele))] )]
Hab das entsprechend dem Beispiel auf der Folie T3-20 gemacht nur das ich das 'doll durch (first alphabet_complete) ersetzt habe und das symbol=? durch das eq?

Wenn das zuviel Quellcode war, dann bitte löschen^^"

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon »

Ich kenn jetzt den Rest von deinem Code nicht, aber du überprüft doch immer nur, ob dein a-ele der erste Buchstabe deines Alphabets ist?! In dem falle müsste #t ausgegeben werden, sonst halt false.

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Code: Alles auswählen

(define (element_of? a-ele)
  (cond
     [(empty? a-ele) #f]
     [(cons? a-ele)
      (cond
         [(eq? (first a-ele) (first alphabet_complete)) #t]
            [else (element_of? (rest a-ele))] )]))
Hier mal der komplette Quelltext, ich hoffe, das macht keien Probleme....

Aber ich glaube, ich sehe gerade, wo das Problem ist....
Ich vergleiche, ob das erste Element das Erste Element im Alphabet ist, bis ich das entsprechende Element gefunden habe...

Aber jetzt frage ich mich....
Wie mache ich das denn jetzt sonst?? :roll:

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Beitrag von Osterlaus »

Einfache Antwort: Lies die Aufgabenstellung.

Um nochmal zu zitieren: "Es ist hilfreich zuerst eine Hilfsfuntion element_of? zu definieren, die für ein Element prüft, ob es im Alphabet enthalten ist."

heiko_s
Erstie
Erstie
Beiträge: 20
Registriert: 8. Nov 2007 22:14
Kontaktdaten:

Beitrag von heiko_s »

BeatriceFriess hat geschrieben:

Code: Alles auswählen

(define (element_of? a-ele)
  (cond
     [(empty? a-ele) #f]
     [(cons? a-ele)
      (cond
         [(eq? (first a-ele) (first alphabet_complete)) #t]
            [else (element_of? (rest a-ele))] )]))
Osterlaus hat geschrieben:Einfache Antwort: Lies die Aufgabenstellung.

Um nochmal zu zitieren: "Es ist hilfreich zuerst eine Hilfsfuntion element_of? zu definieren, die für ein Element prüft, ob es im Alphabet enthalten ist."
@BeatriceFriess
Du prüfst mit dieser Funktion, ob das erste Element des Alphabets im Passwort enthalten ist.
Wenn du eh nur mit dem ersten Element einer Liste arbeiten willst, solltest du der Funktion nur das erste Element, und nicht die ganze Liste übergeben.

Java_the_hut
Gast

Beitrag von Java_the_hut »

Ok, das mit der Hilfsprozedur ist ja jetzt klar, aber wie kann ich im nachhinein auf diese wieder zurückgreifen um die Elemente meines Passwortes zu überprüfen? (check_elements)

heiko_s
Erstie
Erstie
Beiträge: 20
Registriert: 8. Nov 2007 22:14
Kontaktdaten:

Beitrag von heiko_s »

Indem du element_of? in der Definition von check_elements verwendest.

Code: Alles auswählen

(define (check_elements Passwort Alphabet)
             (...
                  (element_of? element alphabet) ...)
Oder wie meinst du das?

soi-disant
Neuling
Neuling
Beiträge: 4
Registriert: 10. Nov 2007 06:31
Kontaktdaten:

Beitrag von soi-disant »

BeatriceFriess hat geschrieben:

Code: Alles auswählen

(define (element_of? a-ele)
  (cond
     [(empty? a-ele) #f]
     [(cons? a-ele)
      (cond
         [(eq? (first a-ele) (first alphabet_complete)) #t]
            [else (element_of? (rest a-ele))] )]))
Hier mal der komplette Quelltext, ich hoffe, das macht keien Probleme....

Aber ich glaube, ich sehe gerade, wo das Problem ist....
Ich vergleiche, ob das erste Element das Erste Element im Alphabet ist, bis ich das entsprechende Element gefunden habe...

Aber jetzt frage ich mich....
Wie mache ich das denn jetzt sonst?? :roll:
:wink:

Ich glaube, du hast da etwas vertauscht...

Die Aufgabenstellung lautet ja (sinngemäß) : Prozedur element_of?, überprüft für ein Element, ob es in der definierten Alphabetsliste enthalten ist.

Listen? Strukturelle Rekursion!

Die Argumente deiner Prozedur stimmen nicht. Mit a-ele meinst du wohl das eine Element, das überprüft werden soll? Sieht nicht aus, als sollte das eine Liste sein.

Um ein Element x mit der gegebenen Liste zu vergleichen, müsste die Definition schon wegen der Argumente in etwa so aussehen:
(define (element_of? the-element the-list)

Das ginge dann in etwa in die Richtung, rein scheme-matisch :) :

Code: Alles auswählen

(define (element_of? the-element the-alphabet-list)
  (cond
    [(empty? the-alphabet-list)                        #f]
    [(eq? the-element (first the-alphabet-list))   #t]
    [else (element_of? the-element (rest the-alphabet-list))]
  )
) 

tarikfori45
Mausschubser
Mausschubser
Beiträge: 47
Registriert: 11. Okt 2007 13:11

hilfe

Beitrag von tarikfori45 »

kann jemand mir sagen was ich hier falsch mache :!: :!: :!:

(define (check_elements? Password alphabet)
(cond
[(empty? Password) #f]
[(element_of? (first Password) alphabet) #t]
[else (check_elements? (rest Password) alphabet)]))

Benutzeravatar
bearmann
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 121
Registriert: 20. Okt 2006 13:53
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von bearmann »

Sers,
hier mal in Worten, was du machst...

Passwort ist leer => Abbruch
Erstes Element des Passworts im Alphabet => OK
Ansonsten => neuer Aufruf

Du hast also nur einen rekursiven Aufruf, wenn das erste Element deines Passworts NICHT im Alphabet enthalten ist -> ist ja nicht ganz SInn der Sache.

Es sollte eher so aussehen...

Passwort leer => Abbruch
Erstes Element des Passworts im Alphabet? => Check_Elements? mit dem Rest des Passworts aufrufen (vorher schauen, ob der Rest des Passworts nicht leer ist!?)
Ansonsten => Abbruch

Vom Sinn her schaut er also, ob das erste Element zulässig ist, dann ruft er sich rekursiv nochmal auf und schaut vom Rest des Passworts, ob hier wieder das erste Element zulässig ist ... usw. usf.
Abbrechen musst du das ganze nur, wenn dein Passwort leer ist, oder ein Element nicht zulässig.

Hoffe, ich konnte helfen.

Grüße,
bearmann

tarikfori45
Mausschubser
Mausschubser
Beiträge: 47
Registriert: 11. Okt 2007 13:11

Beitrag von tarikfori45 »

ach so ok ich habs verstanden
Danke für deine Hilfe :!: :!:

Java_the_hut
Gast

Beitrag von Java_the_hut »

okay ich fühle mich grad dumm xD

also ich hänge noch an der stelle an der sich die funktion nach dem prüfen des ersten elementes wieder aufrufen soll und mit dem zweiten element starten soll also praktisch das erste element der restlichen liste.

theoretisch habe ichs verstanden was ich machen muss, aber ich hänge an der implementierung der kopf is langsam nur noch ein blob XD

heiko_s
Erstie
Erstie
Beiträge: 20
Registriert: 8. Nov 2007 22:14
Kontaktdaten:

Beitrag von heiko_s »

Java_the_hut hat geschrieben: ...also praktisch das erste element der restlichen liste.
Genau das, also rufst du rekursiv check_elements auf und übergibst (rest passwort).
Java_the_hut hat geschrieben: theoretisch habe ichs verstanden was ich machen muss, aber ich hänge an der implementierung der kopf is langsam nur noch ein blob XD
Das kenn ich, mach mal ne Pause! ;)

Antworten

Zurück zu „Archiv“