小编Geo*_*rge的帖子

为什么循环比循环体多执行一次?

引用自算法教科书:

“当 for 或 while 循环以通常的方式退出时(即,由于循环头中的测试),测试比循环体多执行一次。”

因此,例如,以 开头的 for 循环for j=1 to 3将不会执行 3 次,而是执行 4 次!

问题:为什么这样的循环会执行 4 次而不是 3 次?

以我的推理:

When j = 1, the loop is executed. 
When j = 2, the loop is executed.
When j = 3, the loop is executed. 
When j = 4, the loop is NOT executed.
Run Code Online (Sandbox Code Playgroud)

我数 3,而不是 4。

algorithm computer-science

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

什么是clojure Eduction?

(eduction ..)在REPL中调用返回看起来像序列的东西(即" (1 2 3)"之类的东西).但是如果你检查这个返回值是否是一个序列(通过seq?),你得到false.

问题: Eduction究竟是什么?它只是一个值列表,将逐个送入减少函数吗?

clojure

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

将Pure React组件与Om混合使用Next

假设我可以通过某个库访问纯的react.js组件:

var MyPureJavaScriptComponent = React.createClass({
  render: function() {
    //...
  }
});
Run Code Online (Sandbox Code Playgroud)

但我希望使用om.next,其中React组件是通过defui宏构建的:

(defui MyComponent
  Object
  (render [this]
          (div nil "Hello, world!")))
Run Code Online (Sandbox Code Playgroud)

问题:MyPureJavaScriptComponent进入的最佳方式是什么om.next?如果它可以被包装在它自己的调用中,那将是非常好的(至少在美学上),defui因此它MyPureJavaScriptComponent与其他所有om.next组件处于同一个基础上.这是否可能(并且它是最好的方式)?

clojure clojurescript reactjs om

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

将 ClojureScript edn 序列化为文本文件(如 json)?

我正在 ClojureScript 中工作,希望以文本文件的形式序列化大量 EDN 数据结构(特别是:大地图)(与 JS 对象存储为.json文件的方式相同)。性能问题不是问题。

这是否可能,如果可以,是否有考虑标准/最佳实践方法来做到这一点?

clojurescript

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

Haskell的inline-C可以将typedef返回给函数指针吗?

我正在使用C代码库

typedef void(* wl_notify_func_t) (struct wl_listener *listener, void *data) 

//...

struct wl_listener {
  struct wl_list link;
  wl_notify_func_t notify; //<-- I'd like to return this
};
Run Code Online (Sandbox Code Playgroud)

并使用了Haskell代码

type NotifyFuncT = FunPtr (Ptr C'WlListener -> Ptr () -> IO ())

initializeMyCtx = C.context $ C.baseCtx <> C.funCtx <> mempty {
  C.ctxTypesTable = Data.Map.fromList [
     (C.Struct "wl_listener", [t|C'WlListener|])
  -- ...
  ,  (C.TypeName "wl_notify_func_t", [t|NotifyFuncT|])
  ]
}

someHaskellFunction :: Ptr C'WlListener -> IO NotifyFuncT
someHaskellFunction ptrToWlListener = do
  funPtr <- [C.block| wl_notify_func_t {return $(struct …
Run Code Online (Sandbox Code Playgroud)

c haskell ffi inline-c

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

每次调用函数时生成唯一值?

如何制作一个Haskell函数,该函数每次在程序过程中被调用时都会生成一个唯一值?

一种想法是:

incrementInteger :: IO (Integer)
incrementInteger = -- ...
Run Code Online (Sandbox Code Playgroud)

这样,每次在程序执行过程中调用它就递增(无论从哪个线程调用,等等)。

incrementIngeter
=> 0

incrementInteger
=> 1

incrementInteger
=> 2
Run Code Online (Sandbox Code Playgroud)

也就是说,我对此函数唯一关心的属性是“无论如何,每次调用时该值都是唯一的”。这该怎么做?

编辑:看起来Data.UUID通过提供此功能generatedNamed

haskell

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

如何耗尽通道的值然后返回结果(ClojureScript)?

假设通道chan在队列中具有值"1"和"2".

目标:创建一个获取chan并返回向量的函数[1 2].请注意,如果此函数在返回其值之前必须阻塞一段时间,我完全没问题.

尝试:

(defn chan->vector
  [chan]  
  (let [a (atom true) v []]
    (while (not-nil? @a)
      (go
        (reset! a (<! chan))
        (into v @a)
        (reset! a (<! chan))
      )
    ) v
  )
)
Run Code Online (Sandbox Code Playgroud)

结果:我的REPL冻结并最终吐出一个巨大的错误.我已经意识到这是因为(go ...)块是异步的,所以立即返回.因此,我的(while ...)循环中的原子永远不会被设置为nil,并且循环永远不会终止.

那么我该如何实现预期的结果呢?如果它是相关的,我正在使用ClojureScript和目标nodejs.

clojure node.js clojurescript

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

围绕 lein :dependencies 和 :plugins 的困惑

在 a 中project.clj,当您看到以下内容时:

:dependencies [[org.clojure/clojure       "1.8.0"]
               [org.clojure/clojurescript "1.7.228"]
               [com.cemerick/piggieback "0.2.1"]
               [org.clojure/tools.nrepl "0.2.10"]
               [org.clojure/core.async "0.2.374"]]
Run Code Online (Sandbox Code Playgroud)

和:

:plugins [[org.bodil/lein-noderepl "0.1.11"]
          [lein-cljsbuild           "1.1.2"]
          [lein-npm                 "0.6.1"]
          [lein-repls               "1.9.5"]
          [lein-doo                 "0.1.6"]]
Run Code Online (Sandbox Code Playgroud)
  1. 这些包裹来自哪里?仅仅是 Clojars 和 Maven 吗?Lein 也可以配置为从 GitHub 获取它们吗?
  2. 当这些包添加到您的项目中时,lein 是否只是下载它们并将它们添加到您的 java 类路径中?或者还有其他事情发生?

clojure leiningen clojurescript

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

使用Haskell的`mapM`执行的顺序

考虑以下Haskell语句:

mapM print ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)

实际上,这按顺序打印"1","2"和"3".

问:你怎么知道那mapM打印出"1",然后打印出"2",并最终打印出"3".有没有保证会这样做?或者它是如何在GHC深度实施的巧合?

monads haskell traversable io-monad

3
推荐指数
2
解决办法
242
查看次数

为什么调用者必须使用构造函数而不是直接创建结构?

请看下面的代码片段锈锈病编程语言,第二版:

pub struct Guess {
    value: u32,
}

impl Guess {
    pub fn new(value: u32) -> Guess {
        if value < 1 || value > 100 {
            panic!("Guess value must be between 1 and 100, got {}.", value);
        }

        Guess {
            value
        }
    }

    pub fn value(&self) -> u32 {
        self.value
    }
}
Run Code Online (Sandbox Code Playgroud)

和相应教程的评论,强调我的:

接下来,我们实现一个名为valueborrows 的方法self,没有任何其他参数,并返回一个u32.这是一种有时称为getter的方法,因为它的目的是从其字段中获取一些数据并将其返回.这个公共方法是必要的,因为struct 的value字段 Guess是私有的.这是很重要的value领域是私人所以使用的代码Guess结构是不允许设置value直接: 模块外部用户 …

rust

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