Frage

Abhängig von meiner Stimmung schwanke ich zwischen dem Wunsch nach einem Lisp-1 und einem Lisp-2 hin und her.Abgesehen von den offensichtlichen Namensraumunterschieden führt dies leider zu allen möglichen amüsanten Problemen mit Funktionsnamen/etc., auf die Sie stoßen.Ein typisches Beispiel: Ich habe heute Abend versucht, Code zu schreiben (map #'function listvar), was in CL natürlich überhaupt nicht funktioniert.Es dauerte eine Weile, bis ich mich daran erinnerte, dass ich MapCar und keine Karte wollte.Natürlich hilft es nicht, wenn Slime/Emacs zeigt, dass „map IS“ als etwas definiert ist, obwohl es offensichtlich überhaupt nicht die gleiche Funktion hat.

Gibt es also Hinweise, wie man dies minimieren kann, ohne sich für das eine oder das andere zu entscheiden und dabei zu bleiben?

War es hilfreich?

Lösung

Karte ist allgemeiner als Mapcar. Sie könnten beispielsweise Folgendes tun, anstatt Mapcar zu verwenden:

(map 'list #'function listvar)

Wie halte ich Schema und CL in meinem Kopf getrennt?Ich denke, wenn man beide Sprachen gut genug beherrscht, weiß man einfach, was in der einen funktioniert und nicht in der anderen.Trotz der syntaktischen Ähnlichkeiten handelt es sich stilistisch um recht unterschiedliche Sprachen.

Andere Tipps

Nun, ich denke, sobald man genug Erfahrung in beiden Sprachen gesammelt hat, wird das kein Problem mehr sein (nur bei ähnlichen natürlichen Sprachen wie Italienisch und Spanisch).Wenn Sie normalerweise in einer Sprache programmieren und nur gelegentlich zur anderen wechseln, sind Sie leider dazu verdammt, Common Lisp in Scheme zu schreiben oder umgekehrt ;)

Eine Sache, die hilft, ist eine unterschiedliche visuelle Umgebung für beide Sprachen, die Syntaxhervorhebung in einigen anderen Farben usw.Dann wissen Sie zumindest immer, ob Sie sich im Common Lisp- oder Scheme-Modus befinden.

Mir ist durchaus bewusst, dass es syntaktische Unterschiede gibt, obwohl ich sicherlich noch nicht fließend genug bin, um sie automatisch zu verwenden, sodass der Code derzeit viel ähnlicher aussieht ;-).

Und ich hatte das Gefühl, dass Ihre Antwort der Fall sein würde, kann aber immer auf eine Abkürzung hoffen <_<.

Der einfachste Weg, beide Sprachen klar zu halten, besteht darin, in Common Lisp zu denken und Code zu schreiben.Allgemeiner Lisp-Code kann relativ einfach in Scheme-Code umgewandelt werden;Der Wechsel von Scheme zu Common Lisp kann jedoch einige Kopfschmerzen verursachen.Ich erinnere mich, dass ich einmal in Scheme einen Letrec verwendet habe, um sowohl Variablen als auch Funktionen zu speichern, und ihn in die separaten CL-Funktionen für die Variablen- bzw. Funktionsnamensräume aufteilen musste.

Praktisch gesehen mache ich es mir jedoch nicht zur Gewohnheit, CL-Code zu schreiben, was die Zeit, die ich damit verbringen muss, umso schmerzhafter macht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top