Использование регулярного выражения (регулярных выражений) в паренскрипте - PullRequest
0 голосов
/ 27 мая 2020

Я пробую Parenscript. Пытаясь поэкспериментировать с функцией регулярного выражения, я получаю неожиданный результат. например, справочное руководство показывает:

(regex "foobar")
    /foobar/;

(regex "/foobar/i")
    /foobar/i; 

Однако в моем ответе я получаю сообщение об ошибке, что функция (parenscript: regex ..) не определена.

The function parenscript:regex is undefined.
   [Condition of type undefined-function]

Restarts:
 0: [continue] Retry using regex.
 1: [use-value] Use specified function
 2: [retry] Retry SLIME REPL evaluation request.
 3: [*abort] Return to SLIME's top level.
 4: [abort] abort thread (#<thread "repl-thread" running {1002319B63}>)

Backtrace:
  0: (sb-impl::retry-%coerce-name-to-fun regex nil)
  1: (sb-int:simple-eval-in-lexenv (regex "foobar") #<NULL-LEXENV>)
  2: (eval (regex "foobar"))
 --more--

Я попытался изменить пространство имен на cl-user, ps, et c, ничего не сработало. OTOH, просто для проверки, я попытался использовать функции sin, random, et c., И это сработало. Я имею в виду, что набрав (sin 0.1) в ответе, вы получили ожидаемый результат.

Любая помощь будет очень полезной.

1 Ответ

2 голосов
/ 27 мая 2020

В SBCL read-eval-print-l oop:

CL-USER> (in-package "PS")
#<PACKAGE "PARENSCRIPT">

PS> (ps (regex "foobar"))
"/foobar/;"

PS> (in-package "CL-USER")
#<package "COMMON-LISP-USER">

cl-user> (ps:ps (ps:regex "foobar"))
"/foobar/;"

PS:PS - это компилятор Parenscript в качестве макроса.

...