是否可以在Perl 6中实现lisp"语言"?

Din*_*lla 9 lisp perl parsing perl6 raku

在这里,Hello $world每个引用符号的解释我的意思是语言.

 $world = "W?rl?"
"(Hell)*o $world\n"           # <--- plain (Hell)*o, resolve $world, escape \n
'(Hell)*o $world\n'           # <--- plain (Hell)*o, plain $world, escape \n
/(Hell)*o $world\n/           # <--- regexp (Hell)*, resolve $world, interpret \n
<(Hell)*o $world\n>           # <--- make list ["(Hello*o", "$world\n"]
{(Hell)*o $world\n}           # <--- syntax error, this language cant' parse it
Run Code Online (Sandbox Code Playgroud)

Perl 6也足够强大,可以在未来的语言中存在类似的东西

my $emacs_func = (defun perl-backward-to-start-of-continued-exp (lim)
      (if (= (preceding-char) ?\))
          (forward-sexp -1))
      (beginning-of-line)
      (if (<= (point) lim)
          (goto-char (1+ lim)))
      (skip-chars-forward " \t\f"))


$  typeof($emacs_func)
> Emacs Lisp list
Run Code Online (Sandbox Code Playgroud)

所以,问题显然是:can it be done in present specification (or even implementation) of Perl 6

mor*_*itz 18

Perl 6的语法只是用Perl 6编写的语法,而且非常具有可塑性(尽管当前的实现并不能完全提供所有指定的灵活性).

所以你的要求原则上是可能的,但可能需要更多的关注.特别是圆括号完全有效的Perl 6语法,甚至(defun a b)解析为有效的Perl 6.所以你需要/真的/小心消除歧义规则,这将是一个巨大的蠕虫.

将Lisp语法限制为一些特殊定界的句法结构(如lisp(...)q:lisp{...})可能更有意义,尽管可能可以实现一些混合.

我敢肯定,一旦这些功能在编译器中可用,我们就会看到很多有趣的实验,只有那些实验才会显示哪种语言混合既可行又有用.


ike*_*ami 7

[我似乎错过了关于Perl6的问题,而不是Perl5.无论如何都要留下我的答案,因为有些人可能对此感兴趣.

我的理解是Scheme和Lisp是相关的.如果您对Scheme没有问题,那么Inline :: MzScheme允许在Perl中拥有Scheme代码块.

即使你不熟悉Scheme,你也可以分叉模块来编辑它以使用你最喜欢的Lisp引擎而不会有太多麻烦.

它不是你所描述的,但正如moritz解释的那样,你所描述的是不可能的,因为无法知道代码的哪些部分应该被视为Perl代码,哪些部分应该被视为Lisp代码.

在另一个句柄上,通过使用5.14的可插入令牌处理程序(例如,使用feature :: qw_comments来覆盖qw),执行以下操作应该相对容易:

my $emacs_func = lisp(defun perl-backward-to-start-of-continued-exp (lim)
   (if (= (preceding-char) ?\))
      (forward-sexp -1))
   (beginning-of-line)
   (if (<= (point) lim)
      (goto-char (1+ lim)))
   (skip-chars-forward " \t\f"));
Run Code Online (Sandbox Code Playgroud)

(注意添加lisp到您的代码中.)


rai*_*iph 5

Carl Masak 最近(2014 年末)创建了ipso,“Perl 6 中的元循环 Lisp”,适用于当前的 Rakudo。

将有多种方式可以将它与 P6 内联结合起来;请探索“俚语”以获取更多相关信息,例如最近的一篇关于启用递归内联任意 langs 的宏/俚语的博客文章

另请参阅(P6ish) Lisp 中Damian Conway 的Quicksort