关于R中的正则表达式我有一个非常特殊的问题:
grepl("(|^)over","stackoverflow")
# [1] TRUE
grepl("(^|)over","stackoverflow")
# [1] FALSE
grepl("(^|x|)over","stackoverflow")
# [1] FALSE
grepl("(x|^|)over","stackoverflow")
# [1] FALSE
grepl("(x||^)over","stackoverflow")
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
为什么不对所有这些表达式进行评估TRUE?
以下代码来自Fogus,Houser 的Clojure之乐(第二版)第8.1.1章:
(defn contextual-eval [ctx expr]
(eval
`(let [~@(mapcat (fn [[k v]] [k `'~v]) ctx)] ; Build let bindings at compile time
~expr)))
(contextual-eval '{a 1, b 2} '(+ a b))
;;=> 3
(contextual-eval '{a 1, b 2} '(let [b 1000] (+ a b)))
;;=> 1001
Run Code Online (Sandbox Code Playgroud)
我真的不明白建筑的意义`'~v.有人可以详细说明吗?
在书中,只是说
创建的绑定使用有趣的`'~v模式在运行时获取构建的绑定的值.
例如
(contextual-eval '{a 1, b 2} '(+ a b))
Run Code Online (Sandbox Code Playgroud)
扩大到
(let [a '1 b '2] (+ a b)))
Run Code Online (Sandbox Code Playgroud)
我不明白为什么引用这些报价,它们有什么好处.
此外,我们有以下行为:
(contextual-eval '{a 1, b (+ a …Run Code Online (Sandbox Code Playgroud)