这个人非常声称二进制搜索(在C编译器中)比从生成的代码中分支的硬编码要慢.(请原谅Clojure代码和古怪的标题 - 这个声称这个人与一般的编译器有关).
他写
我偶尔会在黑暗的角落看到这种代码.当一个人知道他的处理器如何工作,知道他的C编译器如何工作,知道他的数据结构,并且真的,真的需要他的循环快,然后他偶尔会写这种东西.
这是Real Programmers编写的一些代码.
这是二进制搜索示例(请原谅Clojure)
Start: (1 2 3 4 6 8 9 10 11 12)
Finish: ((((1) (2)) ((3) ((4) (6)))) (((8) (9)) ((10) ((11) (12)))))
Run Code Online (Sandbox Code Playgroud)
然后,如果基于硬编码值,他将生成的代码替换为二进制搜索:
(defn lookup-fn-handwritten [x]
(if (< x 6)
(if (< x 3) ; x is < 6
(if (< x 2) ; x is < 3
(if ( < x 1) ; x is < 2
0 ; < 1
1) ; 1 <= x < 2
3) ; …Run Code Online (Sandbox Code Playgroud) 假设我有以下clojure函数调用:
(def mymap {:a1 1 :a2 2})
(defn my-adder [input-map]
(let [a1 (:a1 input-map)
a2 (:a2 input-map)]
(+ a1 a2)))
(my-adder mymap)
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是通过将地图自动转换为params来使my-adder函数更简单的方法 - 例如:
(defn my-adder [(magic-function input-map)]
(+ a1 a2))
Run Code Online (Sandbox Code Playgroud)
有人能指出我缺少的东西吗?
Common Lisp在其核心库中有700多个函数.Clojure在其库中大概有多少?
(其中'核心库'被定义为当您包含[org.clojure/clojure "1.5.1"]在您的内容时可以访问的所有内容project.clj)
这是Haskell中monoid的一个例子:
> import Data.Monoid
> Sum 5 <> Sum 6 <> Sum 10
Sum {getSum = 21}
> mconcat [Sum 5, Sum 6, Sum 10]
Sum {getSum = 21}
> getSum $ mconcat $ map Sum [5, 6, 10]
21
> getProduct $ mconcat $ map Product [5, 6, 10]
300
Run Code Online (Sandbox Code Playgroud)
这是Clojure中monoid的一个例子:
(defn plus-monoid
([]
0)
([a b]
(+ a b)))
(plus-monoid)
(plus-monoid 3 4)
(reduce plus-monoid [2 3 4])
Run Code Online (Sandbox Code Playgroud)
这是Haskell中一个环的一个例子:
module Rings where
newtype Matrix r = M [[r]] …Run Code Online (Sandbox Code Playgroud) 形式化 TLS 规范并证明实现与其一致仅表明该实现在逻辑上是正确的。然而,它并不表明实施是安全的。您的实现可能容易受到旁道攻击(特别是定时攻击),但逻辑上仍然正确。
我的问题是:如果使用“安全语言”(即 Haskell、Idris)验证 SSL/TLS 实现或使用定理证明者(Coq、Agda)进行检查,它是否仍然容易受到 heartbleed 攻击?
我们可以看到,我们可以使用reduce/ foldl1作为我们可以定义其他更高阶函数的函数,例如map,filter和reverse.
(defn mapl [f coll]
(reduce (fn [r x] (conj r (f x)))
[] coll))
(defn filterl [pred coll]
(reduce (fn [r x] (if (pred x) (conj r x) r))
[] coll))
(defn mapcatl [f coll]
(reduce (fn [r x] (reduce conj r (f x)))
[] coll))
Run Code Online (Sandbox Code Playgroud)
我们似乎也可以这样做foldr.下面是map与filter来讲foldr,从丰富的希基的传感器说话 17:25.
(defn mapr [f coll]
(foldr (fn [x r] (cons (f x) r))
() coll))
(defn filterr [pred …Run Code Online (Sandbox Code Playgroud) 假设我有一张这样的地图
{:a 1 :b 2 :c 3}
Run Code Online (Sandbox Code Playgroud)
我想像这样映射(注意 - 非工作伪代码):
(mapcat (fn [[:key key-a][:value value-a]] (println "key: " key-a "\n value: " value-a )))
Run Code Online (Sandbox Code Playgroud)
如果没有首先获取函数的键,映射它们并从函数中读回它,这是否可行?
我的问题是:如何在不知道Clojure中的键的情况下将地图解构为键值对?
在清除情况下,我可以运行
branchlocation>cleartool vtree <filename>
Run Code Online (Sandbox Code Playgroud)
然后会弹出一个版本树,向我显示该文件的合并。我想在git中做同样的事情。
我认为这是有关的git read-tree-但这与我要寻找的不一样。
我的问题是:如何在git中获取文件的版本树?
我来自SQL Server / Sybase背景。
我习惯于使用以下格式来引用特定模式中的表:
SCHEMA_NAME..TABLE_NAME.
Run Code Online (Sandbox Code Playgroud)
我今天问一位同事关于在Oracle数据库上创建新的“模式”。他的回答是:
在Oracle上,您将获得已登录用户的架构名称。架构名称与登录用户名相同。
这对我来说听起来不太正确。我猜这太简单了,或者有些概念混淆了。
我的假设是Oracle_SID与我在Sybase世界中的“模式”概念相同。
我的问题是:Oracle_SID是否与Oracle的登录名相同?