我需要一个函数,它接受两个列表,例如 (1 2 3 4) 和 (2 3 4 5),并返回它们的交集,即 (2 3 4)。我写了一个可以运行的函数,但它有 8 行长,而且非常“不像 Clojure”,因为我对这项运动还很陌生。我知道那里有一些优雅的东西,甚至可能是一个 Clojure 关键字可以解决整个问题。比较只需在顶层进行,而不是递归整个列表结构。先感谢您。
场景:Visual Studio 2013 Ultimate 版本 4。Windows 8.1 通用项目。C#。我需要一个 Windows 运行时组件来定期更新我的动态磁贴。解决方案构建以错误消息结束:
“winmdexp.exe”退出,代码为-532462766
在过去的 2-1/2 天里我一直在寻找线索。没有什么比这更接近的了。此解决方案中的三个项目中的任何代码都没有语法错误。至少有人能给我指出一个方向吗?
引自 (1975) Maclisp 参考手册:“每个原子符号都与一个属性列表相关联,可以使用plist函数检索它。”
Maclisp 属性列表是“指标/值”对的列表。在 Maclisp 中,
(get x y)
Run Code Online (Sandbox Code Playgroud)
得到 x 的 y 属性。
(putprop x 'banana y)
Run Code Online (Sandbox Code Playgroud)
将 x 的 y 属性设置为香蕉。
我的任务是将许多旧的 Maclisp 代码转换为 Clojure。我是 Clojure 的新手,但随着这个项目的展开,我不会太久。在我跑去自己写一些东西之前,我想知道 Clojure 是否已经有“属性列表”功能?或者接近的东西?
如果没有,组装的 Clojure 众神会让我做什么来实现这样的功能?请记住,Maclisp 中的每个原子符号都可以但不必具有属性列表。谢谢你。
我只是在 REPL 上构建一个函数并遇到了这个问题。
我定义了一个符号 S 并给它一个值:
(def S '(FRUIT COLORS (YELLOW GREEN) SKIN (EDIBLE INEDIBLE)))
Run Code Online (Sandbox Code Playgroud)
我最终想要一个函数,它接受参数列表中的第一个条目以及任何和所有后续参数对,并将它们应用于第一个条目。我的编码从来没有那么远。我想使用循环/recur 构造(我应该这样做吗?),这是我在 REPL 中得到的程度:
(loop [KV# (rest S)]
(if (empty? KV#)
nil
(
(pprint S, (first KV#), (second KV#))
(recur (rest (rest KV#)))
)
)
)
Run Code Online (Sandbox Code Playgroud)
我得到一个“只能从尾部位置重复”编译器错误。
在 Stack Overflow 上到处找了包括 7 或 8 篇文章之后,我只能问:嗯?!
我是新手。如果 recur 不在尾部位置,有人可以向我解释为什么吗?
与'if'语句语法有关吗?啊!Clojure 不适合弱者!谢谢你。
我一直在假设 var 的元数据是“稳定的”,也就是说,我可以在不更改 var 元数据的情况下更改 var 的值。现在我发现我的理解有问题。代码:
(def ^{:Metadata "metaA"} A 1) ;; Define A with value 1 and metadata.
=> #'thic.core/A
(def ^{:Metadata "metaB"} B 2) ;; Define B with value 2 and metadata.
=> #'thic.core/B
A ;; A's value is 1.
=> 1
B ;; B's value is 2.
=> 2
(meta (var A))
=>
{:Metadata "metaA", ;; A has the defined metadata.
:line 1,
:column 1,
:file "C:\\Users\\Joe User\\AppData\\Local\\Temp\\form-init2487748963910096550.clj",
:name A,
:ns #object[clojure.lang.Namespace 0x147c445 "thic.core"]}
(meta (var …Run Code Online (Sandbox Code Playgroud)