2016-06-24 13 views
2

Wie importieren Sie Module in Scheme (vor allem Guile)?Wie lautet die Schemasyntax zum Importieren von Modulen (besonders im Fall von Guile)?

Wie erstellt man ein Modul und importiert es in ein anderes Skript im Schema? Wie sollte ich das Skript kompilieren, wenn ich ein Modul importiere, welche Befehlszeilenargumente müssen übergeben werden? Wie importiere ich das Modul, wenn es in einem anderen Verzeichnis ist?

+1

https://www.gnu.org/software/guile/manual/html_node/Modules.html#Modules –

+0

ich ein Modul test_module.scm erstellt (http://paste.lisp.org/display/ 319117) und ein Skript use_module.scm (http://paste.lisp.org/display/319118). Das Modul und das Skript befinden sich im selben Verzeichnis. Ich habe versucht, das Skript mit dem Befehl "guile use_module.scm" auszuführen. Ich bekomme diesen Fehler http://paste.lisp.org/display/319119, für alle kann ich verstehen, dass das Skript nicht auf das Modul zugreifen kann. Bitte helfen Sie. –

+0

Nun, ich bekam Hilfe von den Jungs vom IRC und ich lernte, wie es gemacht wurde. –

Antwort

1

Lets in ihm und seiner Lage zu sein /some/dir,

(define-module (test_module) 
    #: export (square 
       cube)) 

(define (square a) 
    (* a a)) 
(define (cube a) 
    (* a a a)) 

Hier haben wir ein Modul, ein Modul test_module.scm mit dem folgenden Code erstellen mit der Syntax erstellt:

(define-module (name-of-the-module) 
    #: export (function1-to-be-exported 
       function2-to-be-exported)) 
;; rest of the code goes here for example: function1-to-be-exported 

Jetzt erstellen wir ein Skript, das das von uns erstellte Modul namens use_module.scm mit diesem Code in das aktuelle Verzeichnis importiert.

(use-modules (test_module)) 
(format #t "~a\n" (square 12)) 

Hier haben wir Modul mit der Syntax verwendet:

(use-modules (name-of-the-module)) 
;; now all the functions that were exported from the 
;; module will be available here for our use 

nun zum Kompilieren Teil kommen lässt, haben wir GUILE_LOAD_PATH an den Ort /some/dir und kompilieren das Skript zu setzen .

können nun davon ausgehen, dass beide test_module.scm und use_module.scm im selben Verzeichnis befinden, dann tun:

$ GUILE_LOAD_PATH=. guile use_module.scm 

aber in der Regel dies tun, wenn das Modul in vorhanden ist/some/dir:

$ GUILE_LOAD_PATH=/some/dir guile code.scm 

ps Der einfachste Weg wäre, das Skript zu schreiben, das add-to-load-path verwendet, um den Speicherort des Moduls zu bestimmen. Jetzt können wir kompilieren, ohne uns um die Umgebungsvariablen kümmern zu müssen.

(add-to-load-path "/some/dir") 
(use-modules (name-of-the-module)) 
;; rest of the code