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{...})可能更有意义,尽管可能可以实现一些混合.
我敢肯定,一旦这些功能在编译器中可用,我们就会看到很多有趣的实验,只有那些实验才会显示哪种语言混合既可行又有用.
[我似乎错过了关于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到您的代码中.)
Carl Masak 最近(2014 年末)创建了ipso,“Perl 6 中的元循环 Lisp”,适用于当前的 Rakudo。
将有多种方式可以将它与 P6 内联结合起来;请探索“俚语”以获取更多相关信息,例如最近的一篇关于启用递归内联任意 langs 的宏/俚语的博客文章。
另请参阅(P6ish) Lisp 中Damian Conway 的Quicksort
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |