在这里,每一个引用符号我指的是语言的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那么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所以,问题很明显是:can it be done in present specification (or even implementation) of Perl 6
发布于 2011-11-08 20:43:24
Perl 6的语法只是用Perl 6编写的语法,而且非常灵活(尽管当前的实现并不能提供所有特定的灵活性)。
所以你所要求的原则上是可能的,但可能需要更多的关注。特别是圆括号--完全有效的Perl 6语法,甚至(defun a b)解析为有效的Perl 6。因此,您需要/真的/小心消除歧义规则,这将是一大罐蠕虫。
将Lisp语法限制为一些特殊分隔的语法结构(如lisp(...)或q:lisp{...})可能更有意义,尽管可能会实现一些混合。
我确信,一旦编译器中有了这样的特性,我们就会看到很多有趣的实验,只有这些实验才能说明什么样的语言混合是可行的,也是有用的。
发布于 2011-11-09 00:54:16
我似乎忽略了一个问题,那就是Perl6,而不是Perl5。留下我的答案,因为这可能是一些人感兴趣的。
据我理解,Scheme和Lisp是相关的。如果您对Scheme没有意见,那么内联::Inline允许一个人在Perl中使用Scheme代码块。
即使您对Scheme不满意,您也可以通过分叉模块来编辑它,以使用您最喜欢的Lisp引擎,而不会有太多麻烦。
这并不完全是您所描述的那样,但是正如moritz所解释的,您所描述的是不可能的,因为无法知道代码的哪些部分应该作为Perl代码来处理,哪些部分应该作为Lisp代码来处理。
在另一个句柄上,通过使用5.14的可插接令牌处理程序(例如,评论用来覆盖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"));(注意在代码中添加了lisp。)
发布于 2014-11-29 20:17:20
卡尔·马萨克( Carl )最近(2014年底)创建了针对当前Rakudo的ipso,“Perl 6中的一个元级Lisp”。
有一些方法可以将它与P6内联结合起来;关于这一点,请浏览一下“俚语”,例如最近有一篇关于宏/俚语的博文,它支持任意语言的递归内联。。
也见达米安·康威的快速排序(P6ish) Lisp
https://stackoverflow.com/questions/8056404
复制相似问题