在查看Haskell时,我经常会看到与此类似的类型声明:
a -> (b -> c)
Run Code Online (Sandbox Code Playgroud)
我理解它描述了一个函数,它接受类型为a的东西并返回一个新函数,它接受类型为b的东西并返回类型为c的东西.我也明白类型是关联的(编辑:我错了 - 看下面的评论),所以上面的内容可以像这样重写,以获得相同的结果:
(a -> b) -> c
Run Code Online (Sandbox Code Playgroud)
这将描述一个函数,它接受类型为a的东西和类型为b的东西并返回类型为c的东西.
我还听说你可以通过切换箭头来补充(编辑:真的,我在这里找到的词是双重的 - 请参阅下面的评论)到函数:
a <- b <- c
Run Code Online (Sandbox Code Playgroud)
我认为相当于
c -> b -> a
Run Code Online (Sandbox Code Playgroud)
但我不确定.
我的问题是,这种数学的名称是什么?我想了解更多关于它的信息,以便我可以用它来帮助我编写更好的程序.我有兴趣学习类似于补充函数的东西,以及可以对类型声明执行的其他转换.
谢谢!
如果我将某些东西放到Redis的列表中,然后从该列表弹出,是否可以保证我将获得之前推送的项目,或者是否可以在写入之前进行读取?
我在一个javascript对象中有一个名为'user-agent'的属性,我希望得到它的值.我如何在clojurescript中做到这一点?
(js/eval "a = {'user-agent': 'curl/7.22.0'}")
(js/eval "a['user-agent']") ;=> curl/7.22.0
(.-user-agent js/a) ;=> (returns nothing)
(. js/a -user-agent) ;=> (returns nothing)
Run Code Online (Sandbox Code Playgroud)
这是因为在这里使用点表示法而不是括号表示法检索属性吗?https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L734
这正如我所期望的那样:bar在Clojure中打印:
(println (:foo (clojure.tools.reader.edn/read-string "{:foo :bar}")))
;=> :bar
Run Code Online (Sandbox Code Playgroud)
但这打印nil在ClojureScript中:
(println (:foo (cljs.reader/read-string "{:foo :bar}")))
;=> nil
Run Code Online (Sandbox Code Playgroud)
为了让事情变得陌生,我会按照我的预期:bar在ClojureScript中打印:
(let [data (cljs.reader/read-string "{:foo :bar}")]
(println ((first (keys data)) data )))
;=> :bar
Run Code Online (Sandbox Code Playgroud)
如何访问读者创建的地图中的值?这是一个字符编码的东西吗?
编辑
这是注释中请求的命名空间:
(ns clojuresite.homepage
(:require-macros [hiccups.core :as hiccups])
(:require [hiccups.runtime :as hiccupsrt]
[cljs.nodejs :as node]
[cljs.reader :as reader]))
Run Code Online (Sandbox Code Playgroud) 我正在用Ruby制作一个镜头组合器,我无法弄清楚它的普遍接受的名称是什么.未知函数组成两个具有相同源类型和目标类型的镜头(使用 Benjamin C. Pierce的术语)是一个哈希映射.未知功能接收这两个镜头并返回一个新镜头,它与原始镜头具有相同的光源类型和目标类型.
它看起来像这样(Ruby语法):
lens_a.get(source)
> {:title => "some title"}
lens_b.get(source)
> {:description => "some description"}
new_lens = unknown_function(lens_a, lens_b)
new_lens.get(source)
> {:title => "some title", :description => "some description"}
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建的组合器的图表可以在本演示文稿的幻灯片18上看到(幻灯片的标题是"合并?").
我看过Haskell的镜头文档(我可以理解其中的一小部分),但我无法弄清楚这是哪个组合器.
上面的unknown_function的标准名称是什么?如果这个镜头没有标准名称,是否有一些标准功能可以组成它?如果没有,我可能只是称它为合并.