在python repl中,获取先前输入表达式的结果很简单:
>>> 1+2
3
>>> _
3
>>>
Run Code Online (Sandbox Code Playgroud)
有没有办法在clojure repl中这样做?
假设我有经典的4字节有符号整数,我想要类似的东西
打印十六进制(-1)
给我一些类似的东西
>> 0xffffffff
实际上,上面给出了-0x1.我在一些较低级别的语言中徘徊,而python命令行很容易.
那么..有办法吗?
在加载函数后,有没有办法在clojure中获取函数的代码?
IE浏览器.没做像[未经测试]的事情
(defmacro blat [x] `(do (def code ~(quote (mexpand-all x)))
~x)))
(blat (defn func [abc] (...)))
Run Code Online (Sandbox Code Playgroud) 是否存在在运行时生成AST /解析树的解析器?有点像接受一串EBNF语法或类似的东西并吐出数据结构的库?
现在我知道解析器组合器.(谢谢,Jonas)和一些图书馆(感谢eliben)
顺便说一下,我最近也注意到了Parsing Expression Grammars,听起来很酷的是有人实现它(他们说Perl 6会有它,但是Perl逃避了我的理解)
在python的标准库或语法技巧中寻找一些东西.
对于非clojure程序员,partition-all应具有以下语义:
partition_all(16, lst) == [lst[0:16], lst[16:32], lst[32:48], lst[48:60]]
假设len(lst)== 60
你是怎么做到的,或者甚至是可能的?
我想你可以摆弄getCanonicalWhatever和原始路径,但那很麻烦,我不喜欢它.如果您建议,请提供明确的理由.
Alrighty,LL(k)语言,我的意思是编程语言,其解析器可以用LL(k)语法描述.
这些是我的猜测:
pascal
lisp
xml和朋友们
正如我在这个主题上的反思一样,在我看来,如果一种语言是用C++实现的,它很可能有一种链接到C++的机制.我记得,Java是通过JNI的方式,虽然我不记得它是通过C++还是简单的C.
但是,似乎一般语言不链接到C++,并且由于各种原因只能通过C访问C++.
因此,出于好奇,
哪些语言可以链接到C++以及如何以及在多大程度上?
(除非以优雅或有趣的方式完成,例如Boost.Python,否则上述C桥没有功劳)
不知道如何表达这个..
我写了一个带有两个参数的宏.第一个基本上包含用于生成let表达式的标识符.第二个是在let表达式中使用的代码(它希望能够访问这些标识符).
一个例子:
(match (Add {ast-> x}) (println x))
Run Code Online (Sandbox Code Playgroud)
当第二个参数是原始代码时,事情很好地工作.x绑定到let表达式中定义的x(当macroexpanded时,它只显示为x).但是,当第二个参数是生成(println x)的宏时,x会扩展为类似user/x的内容.
关于如何解决这个问题的任何好主意?