HA3 7

caesar
Erstie
Erstie
Beiträge: 14
Registriert: 13. Nov 2007 18:24

HA3 7

Beitrag von caesar »

hallo,

Code: Alles auswählen

(define (generate-all-pos startnum endnum)
  (cond
    [(< endnum startnum) false]
    [(>= endnum startnum)
     ((cons startnum empty) (generate-all-pos (+ startnum 1) endnum))]
  )
)
ich versuche den zweiten teil der hausarbeit als mit diesem code, es kommt aber immer wieder folgende Fehlermeldung: procedure application: expected procedure, given: (list 5); arguments were: false

Wenn ich es im Stepper verfolge sieht es so aus..

Code: Alles auswählen

((list 1)
 ((list 2)
  ((list 3)
   ((list 4)
    ((list 5) false)))))

i3oot
Erstie
Erstie
Beiträge: 12
Registriert: 24. Okt 2004 20:54
Wohnort: Darmstadt

Beitrag von i3oot »

Code: Alles auswählen

((cons startnum empty) (generate-all-pos (+ startnum 1) endnum))
Diese Zeile ist wohl der Schuldige. Es handelt sich um einen Funktionsaufruf, da er geklammert ist. Jedoch identifiziert das erste Argument keine Funktion, sondern die Liste, die durch (cons startnum empty) erzeugt wird.

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Einfach den Funktionsaufruf (generate-all-pos ....) mit empty ersetzen. Dann sollte es gehen.

caesar
Erstie
Erstie
Beiträge: 14
Registriert: 13. Nov 2007 18:24

Beitrag von caesar »

Wenn ich doch aber den Funktionsaufruf (generate-all-pos) durch empty ersetze, dann fällt meine komplette rekursion weg und ich kann nicht die startnum+1 erzeugen?!

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Ah, sorry, ich meinte das andersherum. empty muss natürlich ersetzt werden. ^^

caesar
Erstie
Erstie
Beiträge: 14
Registriert: 13. Nov 2007 18:24

Beitrag von caesar »

durch?^^

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Beitrag von ChRiZz88 »

Durch den hinteren Teil, das generate-all-pos, so wies da steht ;) Also (cons startnum (generate-all-pos usw..

caesar
Erstie
Erstie
Beiträge: 14
Registriert: 13. Nov 2007 18:24

Beitrag von caesar »

aber cons brauch doch als zweites argument eine liste.. wie soll ich denn so meine liste mit den zahlen erstellen, wenn ich cons versuche eine funktion zu geben?!

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

generate-all-pos liefert dir doch eine Liste als Ergebnis! Siehe Contract.

caesar
Erstie
Erstie
Beiträge: 14
Registriert: 13. Nov 2007 18:24

Beitrag von caesar »

also doch eine hilfsprozedur mit einbauen..

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Nein. Einfach an stelle von empty das generate-all-pos gedöns einbauen. Das wars! Ich hoffe du weißt, dass du anstelle von Werten auch Funktionen einsetzen kannst, dir einen Wert ausgibt. Also applikative Ausführung.

caesar
Erstie
Erstie
Beiträge: 14
Registriert: 13. Nov 2007 18:24

Beitrag von caesar »

ja ist mir klar, aber das zweite argument eines cons muss eine liste sein, jedoch gibt das "generat-all-pos" - gedöns in jedem durchlauf nur einen Wert wieder. Jetzt ist aber Wert != Liste

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Beitrag von ChRiZz88 »

Jau, er führt dann generate-all-pos aus (hätte man des ned gen-row nennen können? :P) und merkt, dass des ne Liste is und schon is des cons n gültiger Ausdruck in dem Kontext..

Edit: Reaktion auf Vorposter xD
Dann haste generate-all-pos falsch implementiert... Bzw nochn Fehler drin

Achja, es wäre günstig, wenn du einen Fall hättest, bei dem er terminiert und zwar positiv terminiert, bisher hast du Folgendes:
Entweder:
Fehler
oder Rekursion solange bis Fehler

Oo kein Wunder, dass er irgendwann startnum solange erhöht hat, bis der erste Fall greift und du nen Fehler hast ;) Du brauchst noch nen Fall, bei dem er die Liste ausgibt ;)

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

generate-all-pos : number number -> (listof number)

Also ist das Ergebnis eine Liste.

caesar
Erstie
Erstie
Beiträge: 14
Registriert: 13. Nov 2007 18:24

Beitrag von caesar »

oh ja...habs jetzt, lag echt an der terminierung, danke nochmal!

Antworten

Zurück zu „Archiv“