2010-12-30 2 views
6

Ich fange an, Lisp mit einem Java-Hintergrund zu lernen. In SICP der Übung gibt es viele Aufgaben, bei denen die Schüler abstrakte Funktionen mit vielen Parametern erstellen sollten, wieZu viele Argumente für die Funktion

(define (filtered-accumulate combiner null-value term a next b filter)...) 

in exercise 3.11. In Java (Sprache mit sicherer, statischer Tippdisziplin) - riecht eine Methode mit mehr als 4 Argumenten normalerweise, aber in Lisp/Scheme tut es das nicht, oder? Ich frage mich, wie viele Argumente Sie in Ihren Funktionen verwenden? Wenn Sie es in der Produktion verwenden, machen Sie so viele Ebenen?

+1

Was ist los mit einer Methode mit 4 mehr als 4 Argumente? – Falmarri

+0

@Falmarri, in der Regel ist es schwer, solche API zu beachten + Sie können Fehler in der Reihenfolge der Argumente machen. –

+1

Das klingt nicht nach Gründen, sich willkürlich auf 4 Argumente zu beschränken. – Falmarri

Antwort

12

SICP ist ein Buch, das im einführenden Informatikkurs verwendet wird. Während es einige fortgeschrittene Konzepte erklärt, verwendet es eine sehr kleine Sprache, eine Untermenge der Scheme-Sprache und eine Untergruppe von jedem realen Schema oder Lisp einer typischen Implementierung.

Es sind zum Beispiel keine Makros in SICP entwickelt. Fügen Sie diesen Standard hinzu Scheme hat nur Positionsparameter für Funktionen.

In ‚echten‘ Lisp oder Scheme kann man einen oder mehrere der folgenden verwenden:

  • Objekte oder Aufzeichnungen/Strukturen (schlechte Schließungen des Menschen), die Gruppe Dinge. Ein übergebenes Objekt kann mehrere Datenelemente enthalten, die ansonsten "verteilt" übergeben werden müssten.

  • Standardwerte für optionale Variablen. Daher müssen wir nur diejenigen übergeben, für die wir einen bestimmten, nicht standardmäßigen Wert haben wollen, und optionale Argumente. Dies ermöglicht flexible Argumentlisten, die viel aussagekräftiger sind.

  • berechnete Argumente. Der Wert oder der Standardwert von Argumenten kann auf der Grundlage anderer Argumente

Above führt zu komplizierter schreiben Funktionsschnittstellen, die oft einfacher zu bedienen berechnet werden.

In Lisp ist es gute Art, beschreibende Namen für Argumente zu haben und auch Online-Dokumentation für die Schnittstelle zur Verfügung zu stellen. Die Entwicklungsumgebung zeigt Informationen über die Schnittstelle einer Funktion an, so dass diese Informationen typischerweise nur einen Tastendruck entfernt sind oder sogar automatisch angezeigt werden.

Es ist auch ein guter Stil für jede nicht triviale Schnittstelle, die interaktiv vom Benutzer/Entwickler verwendet werden soll, um seine Argumente zur Laufzeit zu überprüfen.

+0

Danke. Ich werde mehr darüber lesen) –