LISP Nachteile in Python

8

Gibt es in Python ein Äquivalent von cons ? (jede Version über 2,5)

Wenn ja, ist es eingebaut? Oder brauche ich easy_install bekomme ein Modul?

    
tekknolagi 10.11.2011, 01:12
quelle

5 Antworten

7

In Python ist es typischer, die Array-basierte list -Klasse als die verknüpften Lisp-Listen zu verwenden. Aber es ist nicht schwer, zwischen ihnen zu konvertieren:

%Vor%     
dan04 10.11.2011, 01:34
quelle
7

WARNUNG VORAUS: Das unten aufgeführte Material ist möglicherweise nicht praktisch!

Eigentlich muss cons in Lisp nicht primitiv sein, Sie können es mit λ erstellen. Siehe Verwendung von Lambda für Cons / Car / CDR-Definition in SICP für Details. In Python heißt es:

%Vor%

Nun sollte car(cons("a", "b")) Ihnen 'a' geben.

Wie ist das? Präfix Schema:)

Offensichtlich können Sie die Liste mit cdr recursion aufbauen. Sie können nil als leeres Paar in Python definieren.

%Vor%

Beachten Sie, dass Sie die Variable mithilfe von = in Python binden müssen. Habe ich recht? Da es die Variable mutieren könnte, würde ich lieber eine konstante Funktion definieren.

Natürlich ist das nicht Pythonic, sondern Lispy, nicht so praktisch, aber elegant.

Übung: Implementieren Sie die Listenbibliothek Ссылка von Scheme in Python. Nur ein Scherz:)

    
Alex Vong 30.08.2015 05:09
quelle
3

Beachten Sie, dass Pythons Listen als Vektoren implementiert sind und nicht als verknüpfte Listen. Du könntest lst.insert(0, val) machen, aber diese Operation ist O (n).

Wenn Sie eine Datenstruktur haben möchten, die sich eher wie eine verkettete Liste verhält, versuchen Sie es mit einem alberge 10.11.2011 01:26

quelle
2

Sie können ganz einfach eine Klasse definieren, die sich sehr ähnlich verhält wie cons :

%Vor%

Allerdings wird dies eine sehr "schwere" Möglichkeit sein, grundlegende Datenstrukturen zu erstellen, für die Python nicht optimiert ist. Daher würde ich erwarten, dass die Ergebnisse viel mehr CPU / Speicher beanspruchen als etwas ähnliches in Lisp.

    
Ben 10.11.2011 01:23
quelle
1

Nein. cons ist ein Implementierungsdetail von Lisp-ähnlichen Sprachen; Es existiert in Python in keinem sinnvollen Sinn.

    
duskwuff 10.11.2011 01:17
quelle

Tags und Links