Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

hyperion

Erfahrener Schreiberling

  • "hyperion" is male
  • "hyperion" started this thread

Posts: 422

Date of registration: Oct 8th 2004

1

Monday, October 25th 2004, 8:10pm

Frage über Scheme (Prog. 1)

Hallo,

ich habe da mal eine Frage über die Zuweisung von Variablen in Scheme.
Wie funktioniert denn das, dass ich der Variable x den Wert der Variable y zu weise. Ich weiß wie es mit Konstanten funktioniert und ich habe auch schon die let bzw. set! Funktionen versucht und drscheme gibt mir da immer irgendwelche Fehlermeldungen.

Danke schon mal im Vorraus für irgendwelche Antworten.
"Der Klügere gibt nach! Eine traurige Wahrheit, sie begründet die Weltherrschaft der Dummheit." --Marie von Ebner-Eschenbach

thommyslaw

Junior Schreiberling

  • "thommyslaw" is male

Posts: 226

Date of registration: Oct 7th 2003

2

Monday, October 25th 2004, 8:16pm

(define var value)

z.B.
(define x1 23)

hyperion

Erfahrener Schreiberling

  • "hyperion" is male
  • "hyperion" started this thread

Posts: 422

Date of registration: Oct 8th 2004

3

Monday, October 25th 2004, 8:28pm

Danke, aber ich meinte er folgendes (zB in C++):

int x, y;
y = x;

Wie das mit Konstanten läuft weiss ich, kann ich auch sagen

(define x y) ; ohne Konstanten sondern x und y sind Variablen aus einem Programm

Trotzdem Danke für die schnelle Antwort.
"Der Klügere gibt nach! Eine traurige Wahrheit, sie begründet die Weltherrschaft der Dummheit." --Marie von Ebner-Eschenbach

SUPERDIM

Junior Schreiberling

  • "SUPERDIM" is male

Posts: 171

Date of registration: Oct 7th 2004

Location: Hannover

Occupation: 1. Semester M.Sc. Informatik

4

Monday, October 25th 2004, 8:52pm

Quoted

Original von hyperion
int x, y;
y = x;


(define x 1)
(define y 2)
(set! y x)

Und nicht vergessen, die Sprache auf z.B. "Essentials of Programming Languages (2nd ed.)" zu stellen. Bei "Anfänger" ist u.a. set! rausgenommen worden.

hyperion

Erfahrener Schreiberling

  • "hyperion" is male
  • "hyperion" started this thread

Posts: 422

Date of registration: Oct 8th 2004

5

Monday, October 25th 2004, 8:54pm

Danke, ich hoffe drscheme akzeptiert das alles ohne Probleme.

Ich werds dann mal probieren.
"Der Klügere gibt nach! Eine traurige Wahrheit, sie begründet die Weltherrschaft der Dummheit." --Marie von Ebner-Eschenbach

SUPERDIM

Junior Schreiberling

  • "SUPERDIM" is male

Posts: 171

Date of registration: Oct 7th 2004

Location: Hannover

Occupation: 1. Semester M.Sc. Informatik

6

Monday, October 25th 2004, 9:03pm

Kein Problem. Ich zerbrech mir immernoch den Kopf bei Aufgabe 4:

Source code

1
2
3
4
5
(define (sqrt-iter guess x)
  (if (good-enough? guess x)
      guess
      (sqrt-iter (improve guess x)
                 x)))


Source code

1
2
3
4
(define (sqrt-iter guess x)
  (cond ((good-enough? guess x) guess)
        (else (sqrt-iter (improve guess x)
                   x))))


Wo ist da technisch gesehen der Unterschied?

hyperion

Erfahrener Schreiberling

  • "hyperion" is male
  • "hyperion" started this thread

Posts: 422

Date of registration: Oct 8th 2004

7

Monday, October 25th 2004, 9:09pm

Da kann ich Dir leider nicht so gut helfen. War letzte Woche krank und nicht in der Vorlesung bzw. Übung versuch jetzt nur das alles zu machen, damit ich nicht hinterher hinke.

Aber bei solchen Sachen würde ich mal auf Geschwindigkeit oder Fehleranfälligkeit tippen. Wie gesagt ich habe keine Ahnung, ist nur ein Tipp.
"Der Klügere gibt nach! Eine traurige Wahrheit, sie begründet die Weltherrschaft der Dummheit." --Marie von Ebner-Eschenbach

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

8

Monday, October 25th 2004, 9:38pm

Quoted

Original von SUPERDIM
Kein Problem. Ich zerbrech mir immernoch den Kopf bei Aufgabe 4:

Source code

1
2
3
4
5
(define (sqrt-iter guess x)
  (if (good-enough? guess x)
      guess
      (sqrt-iter (improve guess x)
                 x)))


Source code

1
2
3
4
(define (sqrt-iter guess x)
  (cond ((good-enough? guess x) guess)
        (else (sqrt-iter (improve guess x)
                   x))))


Wo ist da technisch gesehen der Unterschied?


Gibt's also noch die gleichen Aufgaben wie vor drei Jahren. Schön. :)

Zu deiner Frage:
cond erlaubt mehrere Bedingungen hintereinander (ähnlich if () ... else if () ... else ...; oder der switch-Anweisung in C/C++), if erlaubt nur eine Bedingung.
In diesem Beispiel ist kein Unterschied.

HTH, migu
tar: Anlegen eines leeren Archivs wird feige verweigert.

This post has been edited 1 times, last edit by "migu" (Oct 25th 2004, 9:40pm)


SUPERDIM

Junior Schreiberling

  • "SUPERDIM" is male

Posts: 171

Date of registration: Oct 7th 2004

Location: Hannover

Occupation: 1. Semester M.Sc. Informatik

9

Monday, October 25th 2004, 9:40pm

Naja, genau wie bei if wird auch bei cond der else-Ausdruck nicht ausgewertet. Also gibts keine Probleme, wenn er einen Fehler produzieren würde. Geschwindigkeitsmäßig wäre die beiden also auch gleich schnell.

Ich hab beides grad durch einen SCHEME->C compiler durchgejagt und schau mir das an.

Ich hätte nie gedacht, dass mich das Studium so motivieren würde, daß ich mich jetzt durch diesen Konverter-Kauderwelsch durchbeiße. :(

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

10

Monday, October 25th 2004, 9:43pm

Quoted

Original von SUPERDIM
Ich hätte nie gedacht, dass mich das Studium so motivieren würde, daß ich mich jetzt durch diesen Konverter-Kauderwelsch durchbeiße. :(


Das ist doch auch gar nicht nötig! :)
Syntaktisch-strukturell halte ich Scheme für die bessere Programmiersprache als C - gerade für Anfänger, die nicht viel Syntax lernen wollen. Es gibt praktisch nur ein syntaktisches Konstrukt: die Liste. Und sogar jedes Scheme-Programm ist selbst eine Liste. Das hat nette Nebeneffekte. Wartet den hinteren Teil der Vorlesung ab.
tar: Anlegen eines leeren Archivs wird feige verweigert.

SUPERDIM

Junior Schreiberling

  • "SUPERDIM" is male

Posts: 171

Date of registration: Oct 7th 2004

Location: Hannover

Occupation: 1. Semester M.Sc. Informatik

11

Monday, October 25th 2004, 9:55pm

Welche Sprache jetzt besser für Anfänger ist, steht grad (zum Glück) nicht zur Diskussion. Jedenfalls gibt es keinen Unterschied zwischen dem Konstrukt mit cond. Das würde die Aussage:

"Warum ist das auf diese Weise definierte my-if kein gleichwertiger Ersatz für die special-form if? Man begründe
dies anhand der Prozedur sqrt aus der Vorlesung."

widerlegen. my-if beinhaltet das cond-Konstrukt mit einem Prädikat, dem darauf folgenden Ausdruck und den else-Ausdruck. Was soll ich anhand der sqrt Funktion begründen, wenn es völlig identisch ist?

This post has been edited 1 times, last edit by "SUPERDIM" (Oct 25th 2004, 9:56pm)


  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

12

Monday, October 25th 2004, 10:34pm

Quoted

Original von SUPERDIM
Jedenfalls gibt es keinen Unterschied zwischen dem Konstrukt mit cond. Das würde die Aussage:

"Warum ist das auf diese Weise definierte my-if kein gleichwertiger Ersatz für die special-form if? Man begründe
dies anhand der Prozedur sqrt aus der Vorlesung."

widerlegen. my-if beinhaltet das cond-Konstrukt mit einem Prädikat, dem darauf folgenden Ausdruck und den else-Ausdruck. Was soll ich anhand der sqrt Funktion begründen, wenn es völlig identisch ist?
In diesem Fall ist es nicht identisch. Das hat etwas mit der Art der Auswertung der Ausdrücke zu tun.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

SUPERDIM

Junior Schreiberling

  • "SUPERDIM" is male

Posts: 171

Date of registration: Oct 7th 2004

Location: Hannover

Occupation: 1. Semester M.Sc. Informatik

13

Monday, October 25th 2004, 10:54pm

Aaaaah, danke. Jetzt hab ichs kapiert. Ich hatte die ganze Zeit versucht, den Unterschied in den beiden Codeschnipseln oben zu finden.

Jetzt habe ich den Aufruf von my-if untersucht und anhand einer Endlosschleife als else-Ausdruck den Unterscheid festgestellt.

Danke nochmal.

Patty

Praktikant

  • "Patty" is male

Posts: 6

Date of registration: Sep 27th 2004

Location: Hannover

14

Tuesday, October 26th 2004, 1:16pm

wollte gerade mal anmerken, dass der prof ein neues, bzw. verändertes aufgaben blatt, wobei besonderst aufg. 4 verändert wurde, auf seine seite gestellt hat... nun soll man nicht mehr sie sqrt funktion untersuchen, sondern eine neue, die da auf dem aufgabenzettel steht...

Hier der link!

Source code

1
2
3
(my-if (and (<= a b) (>= a b)
(/ 1 (+ a b)
(/ 1 (- a b) 


nun ist doch der unterschied zur originalen if konstruktion, dass bei dieser funktion mehrere predikate erfüllt sein müssen, und dass bei if nur einer geht, oder????

--------
ich habe aber eher noch probleme mit aufgabe 3.... wie ist das denn nun mit den beiden verschiedenen auswertungsformen??
:D :D :D Linux Rules ! ! !:D:D:D

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

15

Tuesday, October 26th 2004, 1:49pm

Quoted

Original von Patty
Hier der link!

Source code

1
2
3
(my-if (and (<= a b) (>= a b)
(/ 1 (+ a b)
(/ 1 (- a b) 


nun ist doch der unterschied zur originalen if konstruktion, dass bei dieser funktion mehrere predikate erfüllt sein müssen, und dass bei if nur einer geht, oder????
Der Unterschied an sich hat sich nicht geändert, da er etwas mit der Deklaration und Auswertung des Prädikats my-if zu tun hat.

Mit dem Beispiel hat das jedenfalls nichts zu tun. Bei einem "normalen" if könnte man ja auch mehrere Bedingungen angeben (einfach im Beispiel my-if durch if ersetzen).

Quoted

ich habe aber eher noch probleme mit aufgabe 3.... wie ist das denn nun mit den beiden verschiedenen auswertungsformen??
Naja, einfach die Ausdrücke auswerten ...

Wie das genau geht, hat Herr Parchmann sicherlich in der Vorlesung erzählt. Ansonsten hilft wie immer SICP: http://mitpress.mit.edu/sicp/full-text/b…tml#%_sec_1.1.5
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

This post has been edited 1 times, last edit by "Joachim" (Oct 26th 2004, 1:49pm)


hyperion

Erfahrener Schreiberling

  • "hyperion" is male
  • "hyperion" started this thread

Posts: 422

Date of registration: Oct 8th 2004

16

Tuesday, October 26th 2004, 7:41pm

Ich wusste gar nicht, dass mein Thread so viele Dinge aufwirft. :)

Naja, egal. Habe gestern nacht noch mein Problem gelöst und jetzt funktioniert auch alles. Auch ohne die Variablen.

Mein Problem mit Scheme ist nur, das es sehr unübersichtlich ist (meine Meinung).
All dieses geklammere und alles möglichst in einander zu verschachteln, das kann doch niemand mehr lesen. Vorallem die Rechenaufgaben vom Übungsblatt.
"Der Klügere gibt nach! Eine traurige Wahrheit, sie begründet die Weltherrschaft der Dummheit." --Marie von Ebner-Eschenbach

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

17

Tuesday, October 26th 2004, 7:50pm

Quoted

Original von hyperion
Mein Problem mit Scheme ist nur, das es sehr unübersichtlich ist (meine Meinung).
Stimmt. Wenn man nicht ständig überlegt, wo man seinen Code verkürzen oder in neue Funktionen auslagern kann, bekommt man viel schneller Probleme als in anderen Sprachen.

Man *kann* in Scheme aber auch sehr elegante Programme schreiben, die zudem gut lesbar sind. Das erfordert aber ziemlich viel Übung.

Sehr ich jedoch ähnlich, daß die Übersichtlichkeit gerade für Anfänger ein Nachteil ist. Andererseits wird man hier gleich zu kurzem Code "erzogen".

Quoted

All dieses geklammere und alles möglichst in einander zu verschachteln, das kann doch niemand mehr lesen. Vorallem die Rechenaufgaben vom Übungsblatt.
Naja, diese Rechenaufgaben sind ja auch keine typisches Beispiel. In Java oder C++ sehen die auch nicht viel schöner aus.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Dr.Evil

Praktikant

  • "Dr.Evil" is male

Posts: 9

Date of registration: Oct 28th 2004

Location: Hannover-Oststadt

18

Friday, October 29th 2004, 2:32am

Fragen zu Übung Prog. 1

Hallo,

ich komme nicht mit den Aufgaben 3 und 4 vom ersten Übingsblatt klar.

Zu 3) Heißt das mit der applicative-order, dass das if predicate erfüllt ist und somit die then-clause ausgeführt wird? Und im Gegenzug bei der normal-order díe Prozedur wegen loop in einer Schleife hängen bleibt , da ja beide Argumente ausgewertet werden? Oder hab ich es garnicht gerafft??

Zu 4) Kann da einer nochmal nen konkreteren Tipp springen lassen???
Das mit den Bedingungen ist mir schon klar, aber ich kann mit dem Hinweis auf Deklaration und Auswertung nur bedingt etwas anfangen.

Hoffe es antwortet bis heute vor 12 noch wer. Vielen Dank schonmal für evt. Hilfestellungen.
Oh Sweet America, how could it be?
Can't see my people dying in the streets no more
Got to hustle from the bottom just to feed the poor
Understanding what's right, realizing what's wrong

Dude

Junior Schreiberling

Posts: 181

Date of registration: Oct 11th 2004

19

Friday, October 29th 2004, 9:19am

RE: Fragen zu Übung Prog. 1

3) Richtig verstanden.

4) Lass die Prozedur mal durch my-if und das normale if auswerten und setz dabei mal ein paar Werte für a, b ein. Der Unterschied sollte dann relativ deutlich werden. Als Tip noch: ist eigentlich fast das Gleiche, wie in Aufgabe 3. ;)

6oeser6u6e

Junior Schreiberling

  • "6oeser6u6e" is male

Posts: 217

Date of registration: Mar 10th 2004

Location: Wolfsburg; Wohnort: Hannover-Nordstadt

Occupation: um Abstand zu der dämlichen Masse zu gewinnen... naja und wegen Geld ;P

20

Friday, October 29th 2004, 9:23am

Quoted

Zu 3) Heißt das mit der applicative-order, dass das if predicate erfüllt ist und somit die then-clause ausgeführt wird? Und im Gegenzug bei der normal-order díe Prozedur wegen loop in einer Schleife hängen bleibt , da ja beide Argumente ausgewertet werden? Oder hab ich es garnicht gerafft??


Egal welche Order du nimmst, bei if wird immer nur eine Klausel ausgeführt! siehe Tip auf Übungsblatt

Quoted

Zu 4) Kann da einer nochmal nen konkreteren Tipp springen lassen???Das mit den Bedingungen ist mir schon klar, aber ich kann mit dem Hinweis auf Deklaration und Auswertung nur bedingt etwas anfangen.


definier doch mal das my-if und benutz es dann mal mit dem ausdruck dadrunter für a=b (einfach für beides 2 einsetzen oder so) und mach dann mal das selbe mit dem normalen if und dann denkst du noch mal an das was ich zu Aufgabe 3) geschrieben hab ;)
Unwissenheit ist ein Segen

This post has been edited 2 times, last edit by "6oeser6u6e" (Oct 29th 2004, 9:24am)