聊聊 functional programming

2015-07-14 19:16:35 +08:00
 madeinclojure

目的

通过对fp的学习,发现改变了一些编程的思路,这里对于这方面的讨论比较少,所以抛砖引玉,学习下。

下面举个例子

(defn simpfy-piece
  "throw away the unnessesaries"
  [piece]
  [(schema/piece-name-id
    (b/get-state :piece-name-ids)
    (:entity piece)
    (:key piece))
   (:val piece)])

下面是修改之后的代码。

(defn piece->simple-piece
  "throw away the unnessesaries"
  [piece-name->id]
  (fn [piece]
    [(piece-name->id (:entity piece) (:key piece))
     (:val piece)] ))

其中的变化

问题:

(defn query
  [clause]
  (query/query->entities
   (query/vindex->entities
    (query/entity-id->entity
     (query/entity-id->pieces
      (idx/entity-id->kindex ref-kindex)
      (store/ids->pieces
       (store/id->piece (fn [entity-name id]
                          (p/get! (b/get-state :pieces-db) id)))))
     (query/pieces->entity (sc/piece-name->id
                             (b/get-state :piece-name-ids)))))
   {:piece-name->id (sc/piece-name->id (b/get-state :piece-name-ids))
    :piece-name->vindex ref-vindex}))

最后,有没有同学可以分享自己的心得,如何用好functional programming.
如果能分享代码更好。

我上面实现的功能比较简单,piece->simple-piece 是将一个map结构的数据,删除掉不需要的部分,同时将里面key为"name"的值转换成id,所以依赖piece-name->id,如果各位来实现,是怎么个思路。

2415 次点击
所在节点    程序员
5 条回复
jiang42
2015-07-14 19:46:05 +08:00
看上去
jiang42
2015-07-14 19:46:53 +08:00
看上去像clojure,它的尾递归就是灾难
jiang42
2015-07-14 19:47:10 +08:00
像clojure,它的尾递归就是灾难
blacktulip
2015-07-14 19:49:25 +08:00
楼上这是在模拟尾递归?
jiang42
2015-07-14 19:53:45 +08:00
@blacktulip nope, 手机回复……我以为没回复上

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/205704

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX