小编Ell*_*mer的帖子

clojure repl中的上一个表达式

在python repl中,获取先前输入表达式的结果很简单:

>>> 1+2
3
>>> _
3
>>> 
Run Code Online (Sandbox Code Playgroud)

有没有办法在clojure repl中这样做?

clojure read-eval-print-loop

33
推荐指数
1
解决办法
3555
查看次数

如何从有符号整数中获取十六进制字符串

假设我有经典的4字节有符号整数,我想要类似的东西

打印十六进制(-1)

给我一些类似的东西

>> 0xffffffff

实际上,上面给出了-0x1.我在一些较低级别的语言中徘徊,而python命令行很容易.

那么..有办法吗?

python

14
推荐指数
1
解决办法
2万
查看次数

得到一个clojure函数的代码

在加载函数后,有没有办法在clojure中获取函数的代码?

IE浏览器.没做像[未经测试]的事情

(defmacro blat [x] `(do (def code ~(quote (mexpand-all x)))
                        ~x)))
(blat (defn func [abc] (...)))
Run Code Online (Sandbox Code Playgroud)

clojure

13
推荐指数
1
解决办法
2136
查看次数

动态(?)解析器

是否存在在运行时生成AST /解析树的解析器?有点像接受一串EBNF语法或类似的东西并吐出数据结构的库?

  • 我知道antlr,jlex和他们的同类.他们生成可以执行此操作的源代码.(比如跳过编译步骤)
  • 我知道Boost :: Spirit,它使用一些带有C++语法的黑魔法在执行时生成这样的东西(绝对更接近我想要的东西,但是当涉及到C++时我是个傻瓜.而且它仍然有点限制,因为你的语法是硬编码的)
  • 我不知道python或ruby中的任何东西,尽管编译器编译器可能在这种语言中非常有效......

现在我知道解析器组合器.(谢谢,Jonas)和一些图书馆(感谢eliben)

顺便说一下,我最近也注意到了Parsing Expression Grammars,听起来很酷的是有人实现它(他们说Perl 6会有它,但是Perl逃避了我的理解)

compiler-construction parsing interpreter lex

6
推荐指数
1
解决办法
3435
查看次数

python相当于clojure的分区 - 全部?

在python的标准库或语法技巧中寻找一些东西.

对于非clojure程序员,partition-all应具有以下语义:

partition_all(16, lst) == [lst[0:16], lst[16:32], lst[32:48], lst[48:60]]

假设len(lst)== 60

python clojure

5
推荐指数
1
解决办法
730
查看次数

java - 确定文件是否是链接

你是怎么做到的,或者甚至是可能的?

我想你可以摆弄getCanonicalWhatever和原始路径,但那很麻烦,我不喜欢它.如果您建议,请提供明确的理由.

java symlink file

4
推荐指数
1
解决办法
232
查看次数

LL(k)是什么普遍的语言?

Alrighty,LL(k)语言,我的意思是编程语言,其解析器可以用LL(k)语法描述.

这些是我的猜测:

pascal
lisp
xml和朋友们

parsing

4
推荐指数
1
解决办法
517
查看次数

在可以链接到c ++的语言上

正如我在这个主题上的反思一样,在我看来,如果一种语言是用C++实现的,它很可能有一种链接到C++的机制.我记得,Java是通过JNI的方式,虽然我不记得它是通过C++还是简单的C.

但是,似乎一般语言不链接到C++,并且由于各种原因只能通过C访问C++.

因此,出于好奇,

哪些语言可以链接到C++以及如何以及在多大程度上?

(除非以优雅或有趣的方式完成,例如Boost.Python,否则上述C桥没有功劳)

c++ linker

3
推荐指数
2
解决办法
252
查看次数

Clojure宏和符号绑定

不知道如何表达这个..

我写了一个带有两个参数的宏.第一个基本上包含用于生成let表达式的标识符.第二个是在let表达式中使用的代码(它希望能够访问这些标识符).

一个例子:

(match (Add {ast-> x}) (println x))
Run Code Online (Sandbox Code Playgroud)

当第二个参数是原始代码时,事情很好地工作.x绑定到let表达式中定义的x(当macroexpanded时,它只显示为x).但是,当第二个参数是生成(println x)的宏时,x会扩展为类似user/x的内容.

关于如何解决这个问题的任何好主意?

macros symbols clojure

3
推荐指数
1
解决办法
939
查看次数