/ / Možno obnoviť používateľské prostredie v schéme REPL? - lisp, schéma, reset, read-eval-print-loop

Možno obnoviť užívateľské prostredie v schéme REPL? - lisp, schéma, reset, read-eval-print-loop

Schéma nováčik otázka-

Existuje spôsob, ako môžem obnoviť svoj súčasný REPL(tj predvolené používateľské prostredie) bez ukončenia a reštartovania mojej REPL? V podstate by som chcel spôsob, ako zničiť svoje súčasné prostredie, takže žiadna z mojej predchádzajúcej definície nie je v platnosti. Používa to program GNU / MIT.

Ak to nie je možné, čo je najlepšia praxtu, keď práve prechádzate s kódom v REPL? Počula som, ako ľudia hovoria o vytváraní a odstraňovaní balíčkov, ale väčšina príkladov sa zdá byť pre spoločný Lisp, ktorý je trochu iný.

Našiel som informácie o tom, ako to urobiť v CPL, ale boli to námietky a zdá sa, že to je špecifické pre Clojure: Môžem čistiť repl?

Vďaka!

edit: Som schopný dokončiť funkčnosť to isté tým, že opustil a reštartoval proces REPL sám.Zistil som spôsob, ako to urobiť, ale udržať pripojenie k môjmu editoru (vim) nažive pomocou vim-screen.This je prijateľné riešenie, ak tam " Nijaký spôsob, ako to urobiť z REPL. Avšak budem mať otázku otvorenú o niečo dlhšie, aby som zistil, či existuje spôsob, ako to urobiť v jazyku, pretože si myslím, že to bude poučné.

odpovede:

11 pre odpoveď č. 1

Myslím si, že ide o implementáciu špecifickú, ale v programe MIT môžete vyčistiť prostredie REPL pomocou:

1 ]=> (ge (make-top-level-environment))

Funkcia (ge [environment]) "Zmení aktuálne prostredie cyklu REP na [prostredie]." a funkciu make-top-level-environment "vráti novo pridelené prostredie najvyššej úrovne".

Program MIT má veľa funkcií správy prostredia, ktoré môžete prehliadnuť tu

Otestoval som to v systéme Mac OS X (10.6.7) s MIT schémou 9.0.1 nainštalovanou prostredníctvom vopred pripravenej binárne z lokality GNU s nasledujúcou reláciou REPL:

1 ]=> (define foo 1)

;Value: foo

1 ]=> foo

;Value: 1

1 ]=> (ge (make-top-level-environment))

;Value 13: #[environment 13]

1 ]=> foo

;Unbound variable: foo
;To continue, call RESTART with an option number:
; (RESTART 3) => Specify a value to use instead of foo.
; (RESTART 2) => Define foo to a given value.
; (RESTART 1) => Return to read-eval-print level 1.

2 error>

Myslím, že rôzne implementácie majúrôzne konvencie, ale nemyslím si, že tam je niečo podobné ako Common Lisp balíky.Ak ste nie sú spojené s MIT schémou, mali by ste sa pozrieť na Racket a Dr Racket, čo je pekné IDE, ktoré by mohli byť silnejšie ako jednoduchý REPL na príkazovom riadku a myslím, že má nejaký modulový systém. Raketa je vlastný dialekt schémy, takže v závislosti od toho, čo robíte, nemusí byť vhodné (predvolený jazykový modul v rakety nie je rovnaký ako schéma MIT)

S týmto problémom som nedávno bojoval (niekoľko poslednýchmesiace), keď som šiel hľadať schému, ktorá by mohla spustiť kód od Lispa v Small Pieces, ktorý má veľa divných makier. Gambit sa stal najlepšou stávkou. Ak nemáte túto potrebu, skontrolujte rakety.