小编Dus*_*etz的帖子

在clojure中实现foreach(doseq)

我正在通过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)

lisp recursion scheme clojure sicp

6
推荐指数
1
解决办法
725
查看次数

轻量级boost :: bind

我很厌烦pass-callback-data-as-void*-struct反模式.Boost绑定很好地解决了它,但是是一种不可接受的依赖.什么是轻量级替代品?我怎么能尽可能简单地自己写呢?

c++ boost function binders

5
推荐指数
3
解决办法
4608
查看次数

使用monads进行批量转换?

刚开始grok monads.我认为在Clojure中,纯度对我来说并不是非常重要.

我有一系列可能失败的业务操作(可组合转换).这可以用error-monad很好地抽象出来.

一些业务操作涉及数据库IO,我需要批量执行操作以提高速度.每个批量操作都作用于一组独立的项目,因此一个失败不得使整个集合失败.

我是否应该将我的批量转换视为一个对象(map)上的一系列函数,这些函数在诸如error monad之类的内容中完成但在seq中作用于独立项?seq-monad帮助我吗?我该怎么想这个?还有其他想法吗?

在Clojure中我将数据库副作用与IO-monad相结合,我认为没有任何特别的好处,对此有何想法?

error-handling monads clojure

5
推荐指数
1
解决办法
128
查看次数

Electric Clojure - 如何将新值添加到表中?(如表格格式)

我开始学习 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)

frontend clojure electric-clojure

5
推荐指数
0
解决办法
258
查看次数

在TableRowCollection上使用linq

我有一个少量行的AspTable.我想在集合上运行一个linq Where()来查找并删除它.

mytable.Rows的类型为TableRowCollection mytable.Rows.AsQueryable()表示它返回一个Linq.Queryable但是intellisense对此并没有给我我的Linq运算符.

linq asp.net

4
推荐指数
1
解决办法
655
查看次数

获取电子邮件未读内容,而不会影响未读状态

现在它是一个gmail盒子,但迟早我希望它可以扩展.

我想在其他地方同步一个实时个人邮箱(收件箱和发件箱)的副本,但我不想影响unread任何未读邮件的状态.

什么类型的访问将使这最容易?如果IMAP会影响读取状态,我找不到任何信息,但似乎我可以手动将消息重置为未读.按定义弹出不会影响未读状态,但似乎没有人使用pop访问他们的Gmail,为什么?

python gmail pop3 imap imaplib

4
推荐指数
1
解决办法
4860
查看次数

为什么eclipse-python没有魔法重构?

Eclipse能够利用编译的字节码来启用"魔术重构"功能 - 重命名方法,跟踪类层次结构和跟踪方法调用.

存在哪些技术障碍使得Python和Javascript等语言难以实现?

javascript python eclipse refactoring automated-refactoring

4
推荐指数
1
解决办法
1168
查看次数

java从List <B>转换为List <A>,其中B扩展A

这可能吗?如果没有,为什么这不可能在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)

我认为我正在寻找的主题是"协变类型",就像这里这里一样,但它的阴暗并且它并没有解决我的问题.

java types casting covariance

4
推荐指数
2
解决办法
801
查看次数

python后期绑定 - 动态地将locals放在范围内

我有一个函数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中执行此操作的一些优雅方法是什么?我考虑过:

  • polymorphism:将m_chain转换为引用的方法,self.bind并且self.unit其实现由子类提供
  • 实现with界面,以便我可以修改环境贴图,然后在完成后清理
  • 将m_chain的签名更改为接受单元并绑定为参数
  • 要求使用m_chain由装饰器包装,装饰器会做某事或其他 - 不确定这是否有意义

理想情况下,我根本不想修改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)

python monads functional-programming

4
推荐指数
1
解决办法
2298
查看次数

java界面泛型投射问题

类型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,则错误消失,这没有任何意义,因为它必须对函数返回类型进行完全相同的强制转换.

java generics

3
推荐指数
1
解决办法
905
查看次数