Domanda

Vorrei impostare la lingua nel rept al volo, con #lang, non usando l'argomento della riga di comando "-i".Ma questo mi dà l'errore "Leggi: #lang non abilitato nel contesto corrente".

C'è un interruttore della riga di comando che mi manca?O forse a ", metacommand" posso usare?Il motivo per cui ho bisogno è perché vorrei poter inviare un buffer Emacs al racket repl, ma che non funzionerà se il file si avvia con #lang.

È stato utile?

Soluzione

[modifica]

Non riesco a ottenere C-x C-b per lavorare con #lang.

Ma un buffer contenente #lang può essere inviato a un repl è stato avviato dal Geiser con C-c C-a. Questo è Passa per repl e inserisci il modulo dal menu a discesa Geiser. Se ho un buffer per bugsy.rkt:

;; bugsy.rkt
#lang racket
(define k 6)
(define j 7)
(define (f lhs rhs)
   (+ lhs rhs))
.

Digitando C-c C-a mi dà questo nel repl:

racket@> ,enter "<filepath>/bugsy.rkt"
racket@bugsy.rkt>
.

Posso quindi accedere al modulo nel repl:

racket@bugsy.rkt> k
6
racket@bugsy.rkt> (f 3 4)
7
.

Se voglio passare a un modulo diverso [o buffer di un file] Posso utilizzare il comando ,enter nel repl:

racket@bugsy.rkt> ,enter "clyde.rkt"
racket@clyde.rkt> ,enter "bonny.rkt"
racket@bonny.rkt>
.

C'è un esempio del comando ,enter nella documentazione. Guarda sopra il dinosauro .

[originale]

Secondo la documentazione della racchetta #lang ha una sintassi molto semplice , il Lettore Essenzialmente bootstraps una sintassi della lingua da qualsiasi modo segue il carattere spaziale dopo #lang. Ciò significa in un certo senso che #lang non è nella sintassi di racket [o di qualsiasi altra lingua]. Invece è una caratteristica di implementazione del lettore che fa parte dell'ecosistema di sviluppo "racket" più grande.

Geiser [e presumibilmente ciarlate e racket-mode] Gestire questo ansando #lang in Elsip prima di passare il codice sulla racchetta. In Geiser, il lavoro è fatto in Geiser-Racket .el .

La funzione di analisi è alla linea 132:

(defun geiser-racket--language ()
  (or (cdr (geiser-racket--explicit-module))
      (save-excursion
        (goto-char (point-min))
        (if (re-search-forward "^#lang +\\([^ ]+\\)" nil t)
            (geiser-syntax--form-from-string (match-string-no-properties 1))))
      "#f"))
.

ed è chiamato da geiser-racket--geiser-procedure on line 166.

(defun geiser-racket--geiser-procedure (proc &rest args)
  (case proc
    ((eval compile)
     (format ",geiser-eval %s %s %s"
             (or (car args) "#f")
             (geiser-racket--language)
             (mapconcat 'identity (cdr args) " ")))
    ((load-file compile-file)
     (format ",geiser-load %S" (geiser-racket--find-module)))
    ((no-values) ",geiser-no-values")
    (t (format ",apply geiser:%s (%s)" proc (mapconcat 'identity args " ")))))
.

che potrebbe darti un punto di partenza per il rotolamento del tuo codice se una delle modalità EMACS esistenti non soddisfa le tue esigenze.

Altri suggerimenti

; foo.rkt
#lang whatever
"hi"
.

è fondamentalmente lo stesso di

(module foo whatever
  "hi")
.

Così come un rapido hack potresti probabilmente tagliare la linea #lang, prendi il lang di esso, e riempire il resto del buffer all'interno del modulo (module ...) prima di comint-send-input-ING.

Ancora più semplice, se non ti dispiace salvare il buffer su disco, prima: basta inviare generacoli ,enter /path/to/file.rkt al buffer Repl, o se non stai usando XREPL, (enter! "/path/to/file.rkt").

Anche, vale la pena menzionare alcune modalità relative a racchetta:

Uno di loro potrebbe già fare ciò che vuoi, o, potresti sbirciare su come funzionano (ognuno richiede un approccio un po 'diverso a questo).

Ho avuto un momento davvero difficile avvolgermi la testa intorno a questo usando la racchetta e il Geiser per passare attraverso la PICP con #lang sicp.Finalmente capito.Basato su tutte le buone risposte sopra, questi sono commenti per ricordare a me stesso da cosa fare e perché:

#lang sicp
;;C-c C-a loads #lang module into REPL (save before loading)
;;C-u C-c C-z is faster than C-c C-a
;;https://docs.racket-lang.org/sicp-manual/index.html
;;https://stackoverflow.com/questions/21008623/setting-language-with-lang-in-the-repl
(#%require sicp-pict)
(paint einstein)
.

Racchetta e Geiser sono due fantastici pezzi di software, quasi arrestati, ma valeva la pena di ottenere questo funzionamento.Grazie a tutti per il buon lavoro e aiutandoci a imparare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top