我正在通过SICP工作 - 一个练习就是实施foreach(doseq).这是一项学术活动.在clojure中,这就是我想出的:
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
Run Code Online (Sandbox Code Playgroud)
但是,如果do是作弊,我有点模糊,因为do在clojure中是一种特殊的形式,我不认为在SICP中已经引入了类似的东西.有更简约的答案吗?
这是另一个只在最后一个元素上执行proc的尝试:
(defn for-each-2 [proc, items]
(let [f (first items)
r (rest items)]
(if (empty? r)
(proc f)
(recur proc r))))
Run Code Online (Sandbox Code Playgroud) 我很厌烦pass-callback-data-as-void*-struct反模式.Boost绑定很好地解决了它,但是是一种不可接受的依赖.什么是轻量级替代品?我怎么能尽可能简单地自己写呢?
刚开始grok monads.我认为在Clojure中,纯度对我来说并不是非常重要.
我有一系列可能失败的业务操作(可组合转换).这可以用error-monad很好地抽象出来.
一些业务操作涉及数据库IO,我需要批量执行操作以提高速度.每个批量操作都作用于一组独立的项目,因此一个失败不得使整个集合失败.
我是否应该将我的批量转换视为一个对象(map)上的一系列函数,这些函数在诸如error monad之类的内容中完成但在seq中作用于独立项?seq-monad帮助我吗?我该怎么想这个?还有其他想法吗?
在Clojure中我将数据库副作用与IO-monad相结合,我认为没有任何特别的好处,对此有何想法?
我开始学习 Electric Clojure 并开始制作一些教育项目(非常简单,因为不幸的是没有关于前端开发方面、dom 元素和实现等的详细文档,甚至更多我没有前端开发经验)并且我需要当用户输入新值时提供一些帮助我希望在表中看到该值。
(e/defn TableApp []
(e/client
(let [!userName (atom "")
!email (atom "")]
(dom/input (dom/props {:placeholder "Please write your username..."})
(dom/on "keydown"
(e/fn [enter]
(when (= "Enter" (.-key enter))
(when-some [givenValue (contrib.str/empty->nil (-> enter .-target .-value))]
(reset! !userName givenValue)
(set! (.-value dom/node)
(dom/props {:placeholder (str "Given Username= " givenValue)})))))))
(dom/input (dom/props {:placeholder "Please write your email..."})
(dom/on "keydown"
(e/fn [enter]
(when (= "Enter" (.-key enter))
(when-some [givenValue (contrib.str/empty->nil (-> enter .-target .-value))]
(reset! !email givenValue)
(set! (.-value …Run Code Online (Sandbox Code Playgroud) 我有一个少量行的AspTable.我想在集合上运行一个linq Where()来查找并删除它.
mytable.Rows的类型为TableRowCollection mytable.Rows.AsQueryable()表示它返回一个Linq.Queryable但是intellisense对此并没有给我我的Linq运算符.
现在它是一个gmail盒子,但迟早我希望它可以扩展.
我想在其他地方同步一个实时个人邮箱(收件箱和发件箱)的副本,但我不想影响unread任何未读邮件的状态.
什么类型的访问将使这最容易?如果IMAP会影响读取状态,我找不到任何信息,但似乎我可以手动将消息重置为未读.按定义弹出不会影响未读状态,但似乎没有人使用pop访问他们的Gmail,为什么?
Eclipse能够利用编译的字节码来启用"魔术重构"功能 - 重命名方法,跟踪类层次结构和跟踪方法调用.
存在哪些技术障碍使得Python和Javascript等语言难以实现?
这可能吗?如果没有,为什么这不可能在Java?
interface B extends A {}
public List<B> getList();
List<A> = getList(); // Type mismatch: cannot convert from List<B> to List<A>
Run Code Online (Sandbox Code Playgroud)
我有一个函数m_chain,它引用了两个函数bind,unit但没有定义.我想在一些提供这些函数定义的上下文中包装此函数 - 您可以将它们视为我想动态提供实现的接口.
def m_chain(*fns):
"""what this function does is not relevant to the question"""
def m_chain_link(chain_expr, step):
return lambda v: bind(chain_expr(v), step)
return reduce(m_chain_link, fns, unit)
Run Code Online (Sandbox Code Playgroud)
在Clojure中,这是用宏完成的.在python中执行此操作的一些优雅方法是什么?我考虑过:
self.bind并且self.unit其实现由子类提供with界面,以便我可以修改环境贴图,然后在完成后清理理想情况下,我根本不想修改m_chain,我想按原样使用定义,并且所有上述选项都需要更改定义.这有点重要,因为还有其他m_*函数引用了在运行时提供的附加函数.
我如何最好地构建这个,以便我可以很好地传递bind和unit的实现?尽管实现复杂,但m_chain的最终用法非常容易使用,这一点非常重要.
编辑:这是另一种有效的方法,这很丑陋,因为它需要m_chain被cur成一个没有args的函数.但这是一个最低限度的工作示例.
def domonad(monad, cmf):
bind = monad['bind']; unit = monad['unit']
return cmf()
identity_m = {
'bind':lambda v,f:f(v),
'unit':lambda v:v
}
maybe_m = {
'bind':lambda v,f:f(v) if v else None,
'unit':lambda v:v
}
>>> domonad(identity_m, …Run Code Online (Sandbox Code Playgroud) 类型List中的方法add(capture#2-of?extends IObject)不适用于参数(IDerived)
protected List<? extends IObject> getObjects()
{
List<? extends IObject> objects = new ArrayList<IObject>();
for (String id: item_ids)
{
IDerived object = (IDerived) readObject(id);
objects.add(object); #error
}
return objects;
}
interface IDerived extends interface IVersionedObject extends interface IObject
Run Code Online (Sandbox Code Playgroud)
如果我将对象的类型更改为List,则错误消失,这没有任何意义,因为它必须对函数返回类型进行完全相同的强制转换.