prolog中的管道运算符返回一个或多个原子头和尾部列表.
?- [a,b,c] = [a,b|[c]].
true.
Run Code Online (Sandbox Code Playgroud)
在单个匹配中嵌套多个管道可以这样做:
?- [a,b,c] = [a|[b|[c]]].
true.
Run Code Online (Sandbox Code Playgroud)
该声明[a|b|c]对a,b和c的推断是什么?
编辑
到目前为止,我所能推断的是:
?- [a,b,c] = [a|b|c].
false.
Run Code Online (Sandbox Code Playgroud)
我对找到答案的任何技术更感兴趣,而不是回答这个边缘无用的问题.
EDIT2
我显然不太熟悉prolog,一个简单的任务回答了我的问题......
?- R = [a|b|c].
R = [a| (b'|'c)].
Run Code Online (Sandbox Code Playgroud)
究竟发生了(b'|'c)什么?
我想得到clojure.core.typed类型检查传递,但我得到一个我不明白的类型错误.
我的问题是:
这是我的代码(我意识到这是不正确的):
(ns clj.util.map
(:require [clojure.core.typed :as t]))
(t/ann map-vals
(All [k v1 v2]
(Fn [ (Fn [(t/Option v1) -> (t/Option v2)])
(t/Option (t/Map k v1)) ->
(t/Option (t/Map k v2)) ])))
(defn map-vals
;; FIXME: Incorrect code
"Apply a function to each of the values in a map, returning the updated map."
[f hm]
(t/doseq> [k :- Any (keys hm)]
(assoc hm k (f (get hm k)))))
Run Code Online (Sandbox Code Playgroud)
这是输出lein typed check clj.util.map:
Initializing …Run Code Online (Sandbox Code Playgroud)