MIT Scheme plus

Es ist Übung Nr. 1.9 im Buch "The Structure and Interpretation of Computer Programs", bei dem ich damals, als aufwachsendes Kind, das erste mal meine Liebe zu Computern spürte - vorhanden war sie schon vorher. Es geht in dieser Übung darum, zwischen zwei Implementationen einer Funktion, die nur mithilfe eines Inkrement-Operators und eines Dekrement-Operators das Addieren realisiert, zu entscheiden, welche iterativ, und welche rekursiv ist.

Dies wird im Dialekt Scheme der Programmiersprache Lisp realisiert.

Voller Ehrgeiz schaute ich also, welche MIT Scheme Implementation denn aktuell sei:

apt-cache search scheme | grep scheme

und erschrak:

mit-scheme - MIT/GNU Scheme development environment

Es existiert also noch immer die originale Implementation des MIT's im Debian Repository. Als ein

apt-cache show scheme

mir nun sagte, das die letzte Versionsnummer 7.7.90+20070909-1 sei, also ziemlich aktuell, fragte ich mich tatsächlich, was denn an dieser Implementation noch zu ändern sei...

Ich startete den Interpreter...

% scheme
MIT/GNU Scheme running under GNU/Linux
Type `^C' (control-C) followed by `H' to obtain information about interrupts.


Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007 Massachusetts Institute of Technology
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Image saved on Friday September 28, 2007 at 10:24:17 PM
Release 7.7.90.+ || Microcode 15.1 || Runtime 15.7 || SF 4.41
LIAR/i386 4.118 || Edwin 3.116

Ich starte die Programmierung folgendermassen:


Inkrement und Dekrement: erste Variante: zweite Variante:

(define (inc x) (+ x 1))
(define (dec x) (- x 1))

(define (plus a b)
(if (= a 0)
b
(inc (+ (dec a) b))))

(define (plus2 a b)
(if (= a 0)
b
(+ (dec a) (inc b))))


Man mache sich klar, wie simpel und doch genial zugleich diese Funktionen sind; zwar ist die rekursive Variante in diesem Beispiel unheimlich ineffizient, zeigt aber das Modell, bzw. den Geist einer Addition recht deutlich.

Sie macht es sich zunutze, das 4 plus 5 = 3 plus 6 = 2 plus 7 = 1 plus 8 = 0 plus 9 ist - und sagt sich - das wenn der linke Operand bei 0 angekommen ist, der rechte Operand das Ergebnis sein muss! Er zählt also den linken Operanden a solange herunter, während er den anderen hochzählt.

Die andere Funktion realisiert dies recht ähnlich.

Nun die Frage an die technisch interessierten Leser: Welche dieser Funktionen ist iterativ, welche rekursiv? Oder sind beide rekursiv bzw. iterativ?

10 Kommentare:

  1. An diesem Beitrag lässt sich wunderbar erkennen, dass deine Beiträge übers Programmieren (i.W.S.) mit der gleichen Willkür-Wut geschrieben sind wie deine restlichen Beiträge über Politik und/oder Gesellschaft etc.
    Du fängst irgendwo mittendrin an, hörst irgendwo mittendrin auf, bringst es nicht zum Ende und versuchst zu guter Letzt noch deinen Gedankenweg so sehr zu vertuschen, dass du ihn nach 24 Stunden selber nicht mehr nachvollziehen kannst. Lerne mal BITTE deine Gedanken etwas strukturierter zu verschriftlichen, ansonsten bleibt das Niveau doch wohl eher auf dem deiner Poser Fotos, was nicht heissen soll, dass ich sie nicht mag, aber mehr als ein Lacher ist halt nicht.

    AntwortenLöschen
  2. Ich habe gerade weiter unten einen Bericht von mir kommentiert, und mir ist beim zweiten Lesen meines Textes tatsächlich aufgefallen, das es einige Zeit gedauert hatte, bis ich mich daran erinnert hatte, was ich tatsächlich meinte. Das ist definitiv ein Fehler in meinem Ausdruck. In diesem Bericht hier aber, finde ich, ist es ein Paradebeispiel für deutliches Ausdrücken, das mir da gelungen ist.

    Und ja, es ist tatsächlich nur Willkür, das dieser Beitrag von mir geschrieben wurde, denn ich habe das SICP zufällig gefunden, und mich direkt mal wieder ein Stück weit eingelesen.

    Ja, das ist ein sehr simples Beispiel. Ich denke daran, vielleicht in kürze mal das Ackermann Problem zu beleuchten; da qualmt mir zumindest schon der Kopf. Wobei ich auch wirklich sehr aus der Übung bin; jahrelanger Suff und Lebensdesinteresse aufgrund von selbstverschuldeter Faulheit und Angst vor mir selber hinterlassen halt seine Spuren...

    So, ich hoffe diesmal schluckt blogger.com diesen Beitrag nicht wieder nach /dev/null...

    AntwortenLöschen
  3. It іs ԁone up fгom ԁivеrsе gгades
    of νerу ѕmаll соmbination that have been bеfоrehand сοаteԁ іn hot
    bitumеn that functions aѕ a binder when combined сarefullу with ѕcorching аsρhalt.
    Sіttіng down there оn уοur cοunter, it rаrely looks caρablе of ѕuch wondeгs,
    but the іnitial timerѕ and the seаsoned cooks aliκe will bеnefit from inсorporating that сommοn flavοr tо thеiг pοpulаr disheѕ.

    Сaггy on 11 milеs, anԁ enϳoy thοroughly for the
    іndication to Lauρahoehoе Posіtion Βeach Pаrk on the
    best.

    Тake a lοok аt my web page 100zakladok.ru

    AntwortenLöschen
  4. I ѕeriously lоve youг website.

    . Excellent colοrs & theme. Did уou makе this amаzing
    site уοurself? Pleasе reply baсk as I'm attempting to create my own personal website and want to learn where you got this from or exactly what the theme is named. Appreciate it!

    Here is my webpage ... midguard.de

    AntwortenLöschen
  5. Ηi evеry one, herе every one is shaгіng theѕe kindѕ of familіarity, therefοгe it's good to read this website, and I used to visit this web site every day.

    Also visit my web blog - augenlasern

    AntwortenLöschen
  6. He еspecially enјoys one that is loаded with
    veggіes. Ϲare ought to be taκen when dealing with the stone, аs it can not withstand sudԁen temperature versions.
    Thаt is, untіl I thοught about making a pizza using my сast iron skillet.


    Аlsο visit my web site - economyinsight.co.kr

    AntwortenLöschen
  7. Excеllent way of explaining, anԁ pleаsаnt article
    tо get datа rеgаrding my presentаtion toρic, which i am
    going to conѵey in inѕtitution of higher eԁucatiоn.


    Loοk into my ωeb-sіtе: bathroom cabinets

    AntwortenLöschen
  8. The Capability of Having To observe Movies Internet

    Also visit my page ... mp3 to video

    AntwortenLöschen
  9. The easiest way to Clean typically the Upholstered Home furniture

    Feel free to visit my website ... scandalous

    AntwortenLöschen
  10. 58 female Residence songs intended for cabaret and also Musicals
    vocalists

    my web-site; paday loans uk ()

    AntwortenLöschen