Wer kennt sich mit Scheme aus?



  • Darf ich mal fragen, an welcher Uni Scheme unterrichtet wird? Würd mich mal interessieren..



  • @Doktor

    Bin in Mannheim auf der Uni. Wird im "Fach" Praktische Informatik unterrichtet.

    @Bashar

    Danke Dir !!

    Weisst du vielleicht was mit dem Gewicht-Objekt gewicht gemeint wird?

    Gewicht-Objekt ist mir klar, denn das wird ja von erzeuge-gewicht produziert.
    Zuerst dachte ich an:

    (define (gebe-gewicht-aus gewicht) (erzeuge-gewicht))

    Aber das geht ja nicht.



  • dprzon schrieb:

    @Doktor
    Weisst du vielleicht was mit dem Gewicht-Objekt gewicht gemeint wird?

    Ja, dein Gewicht-Objekt ist jetzt repräsentiert durch eine List mit drei Elementen: (tonnen kilogramm gramm)

    Man kann das Gewicht-Objekt auch durch ein Integer darstellen: 111222333 wäre in der Listendarstellung (111 222 333).



  • dprzon schrieb:

    Bin in Mannheim auf der Uni. Wird im "Fach" Praktische Informatik unterrichtet.

    Nett.

    Weisst du vielleicht was mit dem Gewicht-Objekt gewicht gemeint wird?

    Das, was erzeuge-gewicht zurückgibt. Also bei mir die Liste.

    Zuerst dachte ich an:

    (define (gebe-gewicht-aus gewicht) (erzeuge-gewicht))

    Aber das geht ja nicht.

    Ich seh schon wieder nicht deinen Gedankengang. gebe-gewicht-aus soll ein Gewicht ausgeben, nicht eins erzeugen. Dazu musst du die einzelnen Komponenten eines Gewicht-Objektes extrahieren und wie gefordert ausgeben.



  • Doktor Prokt schrieb:

    Darf ich mal fragen, an welcher Uni Scheme unterrichtet wird? Würd mich mal interessieren..

    OT: afaik wird das noch an ziemlich allen unis gelehrt...



  • Aber im Fach "Praktische Informatik"?!?! 😕



  • Ich seh schon wieder nicht deinen Gedankengang. gebe-gewicht-aus soll ein Gewicht ausgeben, nicht eins erzeugen. Dazu musst du die einzelnen Komponenten eines Gewicht-Objektes extrahieren und wie gefordert ausgeben.

    Ich weiß dass das wahrscheinlich/offensichtlich sinnlos ist was ich da schreibe. Es ist bei mir so, dass ich Programmieren bisher immer durch Beispiele gelernt habe und dann ging alles ganz schnell...

    Bei der b) hab ich das Problem, dass ich jetzt nicht weiß ob gewicht eine Variable ist die ich neu reinbringen muss.

    Dass man mit "display..." ausgeben kann weiß ich. Aber wie t, k, g reinbringen?
    Bei C ist das ja so, dass man bei der Ausgabe "printf" einfach z.b. %d hinschreibt im Text und dann am Ende welche Variable (Wert) ausgegeben werden soll.



  • *neid* (lerne nur java und pascal im studium, ev. ada, aber fiel aus letzes mal)

    hier ein link
    http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-1.html#node_toc_start

    aber mit tutorials bist du sicher eingedeckt. aber da sind ein paar beispiele
    http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-14.html#node_sec_12.1



  • [quote="dprzon"]

    Bei der b) hab ich das Problem, dass ich jetzt nicht weiß ob gewicht eine Variable ist die ich neu reinbringen muss.

    Dass man mit "display..." ausgeben kann weiß ich. Aber wie t, k, g reinbringen?
    Bei C ist das ja so, dass man bei der Ausgabe "printf" einfach z.b. %d hinschreibt im Text und dann am Ende welche Variable (Wert) ausgegeben werden soll.

    Du könntest beispielsweise schreiben:

    (define (ausgabe g)
      (display "Tonnen: ")
      (display (car g))
      (display "\n")
      (display "Kilogramm")
      ;; usw.
    )
    

    Die meisten Scheme-Implementierungen bieten allerdings eine freundlichere Ausgabefunktion an. PLT-Scheme hat zB ein Lisp-ähnliches format und sogar ein printf. Damit sieht das dann so aus:

    (define (ausgabe g)
      (printf "Tonnen ~a~nKilogramm ~a~nGramm ~a~n" (car g) (cadr g) (caddr g)))
    

    Welches Scheme benutzt du denn?



  • Danke für die Seite!

    Ich bin jetzt auf folgendes insgesamt gekommen:

    (define (erzeuge-gewicht t k g)
      (list t k g))
    (define gebe-gewicht-aus
      (lambda (t k g)
        (begin
          (display #\t)
          (display ";")
          (display #\k)
          (display ";") 
          (display #\g)
          (newline))))
    

    Wenn ich das so programmiere und dann im Programm, z.b. folgendes eingebe:

    (erzeuge-gewicht 1 2 3)

    (gebe-gewicht-aus #\t #\k #\g)

    Dann bekomme ich...

    t;k;g
    

    ausgegeben.

    Aber ich will ja, dass er mir den Inhalt von t, k, g ausgibt.

    Ist das programmiertechnisch so überhaupt sinnvoll wie ich das machte?



  • dprzon schrieb:

    Danke für die Seite!

    Ich bin jetzt auf folgendes insgesamt gekommen:

    (define (erzeuge-gewicht t k g)
      (list t k g))
    (define gebe-gewicht-aus
      (lambda (t k g)
        (begin
          (display #\t)
          (display ";")
          (display #\k)
          (display ";") 
          (display #\g)
          (newline))))
    

    Du gibst hier die Zeichen (Buchstaben 't', 'k' und 'g') aus. Du willst aber die Werte haben, die sich hinter den Symbolen verstecken. Schau dir einfach mal meinen vorigen Beitrag an.

    Wenn du dir noch mal die Definition von erzeuge-gewicht vor Augen führst,

    (define (erzeuge-gewicht t k g)
      (list t k g))
    

    dann ist doch, wie schon gesagt wurde, die Liste (t k g) dein Gewicht-Objekt, d.h. die Funktion gewicht-ausgabe bekommt nur *einen* Parameter (das Gewicht-Objekt eben), aber auch das habe ich schon oben geschrieben.



  • Hallo,

    habe deinen Beitrag erst jetzt gelesen. Habe danach nämlich nicht mehr nachgeschaut.

    Ich benutze DrScheme Version 208 by PLT.

    Wenn ich das eingebe, also:

    (define (ausgabe g)
      (display "Tonnen: ")
      (display (car g))
      (display "\n")
      (display "Kilogramm")
    ;; usw  
    )
    

    Ich habe natürlich auch vorher definiert:

    (define (erzeuge-gewicht t k g)
      (list t k g))
    

    g steht in deinem Quellcode für "gewicht" ?
    Und wofür "car g" ?



  • Das lag anscheinend am Modus. Ich hatte "Fortgeschrittener" eingestellt.
    Jetzt habe ich "standart" eingestellt, wie wir es auch vorgegeben bekommen haben.

    Er lässt es zwar durchlaufen, aber er gibt nicht aus.
    ich habe so programmiert:

    (define (erzeuge-gewicht t k g)
      (list t k g))
    (define (ausgabe-gewicht)
      (display ";")
      (display (car t))
      (display ";")
      (display (car k)
      (display ";")
      (display (car g))
    
    ))
    

    Und folgendes Problem habe ich jetzt..hier mal der Ablauf:

    Willkommen bei DrScheme, Version 208.
    Sprache: FrTime.
    > (erzeuge-gewicht 1 2 3)
    (1 2 3)
    > (ausgabe-gewicht)
    . reference to undefined identifier: display
    >
    


  • <OT>

    elise schrieb:

    *neid* (lerne nur java und pascal im studium, ev. ada, aber fiel aus letzes mal)

    da sind wir mit c, c++, java, haskell und prolog ja ganz gut bedient. in einigen kursen kann man bei uns auch modula 3, pascal und lisp lernen.

    btw, scheme sieht mir sehr nach lisp aus. ist das ein lisp-dialekt?
    </OT>

    Hier fehlt eine Klammer

    (display (car k)
    


  • Danke für die Info!!

    habe das geändert, aber der Fehler kommt immer noch.

    Also jetzt habe ich.

    (define (erzeuge-gewicht t k g)
      (list t k g))
    (define (ausgabe-gewicht)
      (display ";")
      (display (car t))
      (display ";")
      (display (car k))
      (display ";")
      (display (car g))
    
    )
    

    Wenn ich nach meiner eingabe (erzeuge-gewicht) dann "ausgabe-gewicht" eingebe, kommt der Fehler immer noch.

    reference to undefined identifier: display



  • Also, wenn ich mir http://www.cs.nyu.edu/courses/fall04/G22.3110-001/scheme_lecture3.txt
    anschaue, dann vermute ich, dass da ein

    #<procedure:STDIN::1322>
    

    fehlt. Die Zahl nach STDIN kann man scheinbar frei wählen. Probiers einfach aus... mehr als falsch sein kann es nicht 😉 .



  • Wie meinst du das mit #procedure:STDIN:1322: ?

    Soll ich das da irgendwo eingeben??



  • Haben die in dem angegebenen Link zumindest gemacht. Die benutzen auch display.



  • Das funktioniert leider nicht.

    Da könnt man verrückt werden. nichts funktioniert was ich versuche



  • MaSTaH schrieb:

    btw, scheme sieht mir sehr nach lisp aus. ist das ein lisp-dialekt?

    Ansichtssache. Genauso wie Java ein C++-Dialekt ist 😉 (ohne damit jetzt irgendwas werten zu wollen). Grundlegende Konzepte sind zwar übernommen, aber Scheme wurde eigentlich nur auf der Grundlage der Lisp-Syntax entwickelt, um leichter bestimmte fortgeschrittene Programmierkonzepte (Closures, Continuations) zu testen. Die Grundphilosophie, die Common Lisp heute ausmacht, fehlt allerdings in Scheme, so dass Scheme von vielen Lispern eher in die Schublade "funktionale Sprache, die zufällig Lisp-Syntax hat" abgeschoben wird.

    vermute ich, dass da ein

    #<procedure:STDIN::1322>
    

    fehlt.

    Nein, das ist eine Ausgabe der Implementation. Der vorher eingegebene Ausdruck (f 3) hat eine Funktion erzeugt, und obiges ist einfach die Art, wie sowas angezeigt wird. Die Syntax #< ist sogar so definiert, dass sie beim Einlesen direkt einen Fehler erzeugt, und kann damit generell zur Ausgabe "unlesbarer" Werte benutzt werden. Im Unterschied zu "lesbaren" Werten, die nach Ausgabe und Wiedereinlesen gleich (nicht unbedingt identisch) ihrem Original sind (das trifft z.B. auf Zahlen, Strings, Symbole, Listen usw. zu, aber eben nicht auf Funktionen).


Anmelden zum Antworten