Open Source im professionellen Einsatz
Newsletter abonnieren
HEFTARCHIV | NEWS | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO

Partner-Links:
Shopping
Yatego Deutschlands größte Shoppingmall. 7000 Shops,
2.5 Mio Artikel. Alle Bestseller, Gutscheine und Liveshopping.

Firewall bei Mercateo kaufen.

Ein Preisvergleich bei Hardware lohnt sich.

Bei inkpool.de Laserdrucker und mehr bestellen.

Sie suchen günstige Laptops? Schauen Sie doch mal bei Preisvergleich.org, Preisvergleich.eu, Preisvergleich.ch und Preisvergleich.at vorbei.

Linux Jobs

Job offers Netherlands


user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2001  »  01  »  Funktioneller gehts nicht  

RSS-Feed der aktuellen News von Linux-Magazin Online
Diesen Artikel drucken Diesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren

Lokale Variablen

Wie in anderen Sprachen kann man auch in Scheme lokale Variablen deklarieren und nutzen. Im Gegensatz zu den meisten anderen Sprachen ist es unerheblich, ob es sich bei den Werten der lokalen Variablen um Daten oder Funktionen handelt. Lokale Variablen werden in einem mit let oder let* eingeleiteten Block deklariert und initialisiert. Der Unterschied zwischen let und let* besteht darin, dass man sich in let* auf vorher auftretende Deklarationen beziehen kann. Bemerkenswert an den beiden lets ist, dass sie nur Makros um das schon bekannte lambda sind. Im Prinzip sind die beiden folgenden Zeilen äquivalent:

(let ((i 1)) (display i) (newline))
((lambda (i) (display i) (newline)) 1)

Die erste Art ist meiner Meinung nach besser lesbar und verständlicher. Beachten Sie aber bitte, dass Sie nicht das "named-let" aus dem ersten Teil mit dieser lokalen Variablendeklaration vertauschen. Die hier gültige Form lautet: (let ((variable init)) . Auf die Initialisierung kann in Scheme nicht verzichtet werden.

Am folgenden Beispiel erkennen Sie, dass man in Scheme auch Funktionen an lokale Variablen binden kann.

(let ((d (lambda (n) (* n 2))))
    (display (d 1)) (newline))

Let kann man nicht nur innerhalb anderer Funktionen oder weiterer let-Blöcken finden, sondern auch auf dem Top-Level. In jedem Fall sind die deklarierten Variablen nur bis zum Ende des Blockes sichtbar, in dem sie definiert wurden.

Die Verschachtelung gilt nicht nur für lets, sondern auch für Kombinationen von let und define. Ob Sie also (let ((i 1) (j 10)) (+ i j)) benutzen oder (let ((i 1)) (let ((j 10)) (+ i j))), richtet sich nach der Situation oder Ihren Vorstellungen. Scheme legt Ihnen auch keine Restriktionen bezüglich der Position von weiteren Funktionen oder der Einführung von lokalen Variablen auf.

Lexikalische Bindung

Scheme spielte in diesem Bereich eine Vorreiterrolle in der Lisp-Familie. Die lexikalische Bindung veranschaulicht wiederum ein Beispiel am besten.

(define counter 50)
(define (inc-counter)
  (set! counter (+ 1 counter))
  counter)
(let ((counter 100))
  (display (inc-counter)) (newline)
  (display (inc-counter)) (newline))

Da in Scheme die lexikalische Bindung gilt, erhalten Sie als Ausgabe 51 52. Zwar überlagert der counter im let-Block die globale Variable mit dem gleichen Namen, jedoch nicht in der Funktion inc-counter. Als diese Funktion definiert wurde, war nur die globale Variable bekannt, und nur auf diese hat inc-counter Zugriff. Innerhalb des Blockes definierte Funktionen oder Variablen hätten hingegen nur Zugriff auf die überlagerte Variable.

Eine andere Art der Bindung wird dynamische genannt, sie war Standard in den ersten Lisps Versionen, bei Emacs Lisp handelt es sich noch um ein Lisp mit dynamischer Bindung. Dr. Scheme stellt diese Bindung mit fluid-let zur Verfügung:

(fluid-let ((counter 100))
  (display (inc-counter) (newline))
  (display (inc-counter) (newline)))

Ausgabe hier: 100 101. Da das Verhalten sich bei der lexikalischen und dynamischen Bindung unterscheidet, sollten Sie sich der jeweils gültigen Bindung bewusst sein. Scheme unterstützt normalerweise nur die lexikalische Bindung, Common Lisp bietet beide Arten und Emacs Lisp standardmäßig die dynamische Bindung (mit Möglichkeiten, die lexikalische Bindung zu emulieren).

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Diese Seite zu Mister Wong hinzuf�gen Webnews yigg it! Slashdot it! Twittern!
Whitepaper
Daten Migration - Eine Publikation von Bloor Research

Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.

Download PDF (Registrierung erforderlich)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)
 

Impressum |Datenschutzerklärung | © 2010Linux New Media AG
Partner-Sites
Deutschland: [Admin-Magazin] [LinuxUser] [EasyLinux] [Linux-Community] [Linux Technical Review] [Ubuntu User]
Europa: [EasyLinux Polen] [Linux Magazine Polen] [Linux Magazine Spanien]
International: [Linux Magazine International] [Linux Pro Magazine] [Ubuntu User] [Linux Magazine Brasilien] [EasyLinux Brasilien]