2017-04-15 4 views
0

Hinweis: Ich mache das für Hausaufgaben. Ich suche nicht nach dem Algorithmus, um mein Problem zu lösen, ich versuche nur zu verstehen, wie Scheme funktioniert.Rückgabe des kleinsten Elements in einer Liste in Schema

Ich bin neu zu Schema und versuche, ein kleines Programm zu schreiben, um das kleinste Element in einer Liste zu finden. Das Programm arbeitet seit dem, da es die richtige Antwort findet (also ist die Logik etwas gesund), aber ich weiß das nur, weil ein Fehler auftaucht, der versucht, meine Antwort als eine Funktion zu behandeln und sie zu nennen.

(DEFINE (startmin mylist) 
(

    (repeatmin (CAR mylist) (CDR mylist)) 


)) 


(DEFINE (repeatmin curmin mylist) 
(

    (IF (NULL? mylist) ;If the list is empty 

     ;This is where I'm at a loss. I want a way for this value to be 
     ;sent out once the list is empty 
     curmin ;return the current minimum 

     (IF (< curmin (CAR mylist)) ;if the current minimum is less than the head of the list 
      (repeatmin curmin (CDR mylist)) ;recurse with curmin 
      (repeatmin (CAR mylist) (CDR mylist)) ;otherwise recurse with the head of the list. 
     ) 
    ) 
)) 

Ich bin wirklich ratlos, wie ich den Wert zu erhalten, einmal gefunden, wieder aus der Rekursion, wie es versucht, hält den Wert als eine Funktion zu behandeln.

+0

[Sylwester Antwort] (http://Stackoverflow.com/a/43430528/7872323) repariert es für mich. –

+1

Sie sollten Ihre Frage nicht manuell als "[gelöst]" markieren. Akzeptiere Sylwesters Antwort, indem du auf sein graues Häkchen-Symbol klickst. Die Miniaturen der Frage werden automatisch grün markiert. – suchtgott

Antwort

2

Ihre Klammern sind deaktiviert. Wenn Sie

((if ...)) 

schreiben bedeutet es, dass das Ergebnis von if eine Funktion, die sofort aufgerufen werden soll, sobald der Wert cmoputed wird. Es scheint, dass Sie Klammern verwenden, als wären sie Blöcke, wie {} in C, aber sie sind nicht. Tatsächlich ist (begin ...) ein Block in Scheme. Und natürlich eine Funktion, let und cond Begriffe haben implizite beginnen .. So

(define (func . args) 
    (begin 
    x 
    y)) 

ist die gleiche wie

(define (func . args) 
    x 
    y) 

Bitte auch format your code correctly. Einzug hilft Ihnen, den Code und die Verschachtelung zu lesen. Ich kümmere mich wirklich nicht um die Klammern, nur die Position, die entscheidend ist. Wählen Sie einen Editor, der dies für Sie erledigt. Z.B. DrRacket ist eine nette, die ich benutze.

+0

Vielen Dank! Es war der zusätzliche Satz von Klammern, der es abwarf. Ich glaube, ich habe missverstanden, als der Lehrer erklärte, wie die Parens in der Klasse verwendet wurden, ich nahm sie als Parens und Curly Braces von C an. Ich werde diesen Style Guide durchgehen und meinen Code in ein besseres Format bringen jetzt. Nochmals vielen Dank. –

+1

@ChristopherMayer Gern geschehen. Ich denke, dass das Erlernen anderer Sprachen es schwieriger macht, Scheme zu lernen, aber es ist eine großartige Sprache und du wirst besser in den anderen Sprachen, die du kennst, besser werden, da du lernst, anders zu denken. Wenn diese Antwort Ihnen geholfen hat, denken Sie bitte an [Annahme der Antwort] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). – Sylwester

Verwandte Themen