markdown core.async热狗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown core.async热狗相关的知识,希望对你有一定的参考价值。

;;
;; from https://www.braveclojure.com/core-async/
;;
(ns core-async-hotdog.10_hotdog_core_async_go_loop)
(require '[clojure.core.async :as async :refer [<! >! <!! >!! timeout chan alt! alts! alt!! alts!! close! go]])

;;
;; 投硬币, 吐出热狗
(defn hot-dog-machine
  []
  (let [in (chan)
        out (chan)]
    (go (<! in)
        (>! out "hot dog"))
    [in out]))

(comment
  (let [[in out] (hot-dog-machine)]
   (>!! in "pocket lint")
   (<!! out))
  )
; => "hot dog"



;;
;; 对热狗机加以限制
;; 1. 限制总热狗数量
;; 2. 输入必须是3 元才吐出热狗
;;
(defn hot-dog-machine-v2
  [hot-dog-count]
  (let [in (chan)
        out (chan)]
    (go (loop [hc hot-dog-count]
          ;; 库存热狗数量大于0
          (if (> hc 0)
            (let [input (<! in)]
              (if (= 3 input)
                ;; 输入恰好是3, 吐出热狗, 并且热狗数量减一
                (do (>! out "hot dog")
                    (recur (dec hc)))
                ;; 不是3, 没有热狗, 返回继续循环
                (do (>! out "wilted lettuce")
                    (recur hc))))
            ;; 库存热狗数量 <= 0, 关闭输入输出的channel
            (do (close! in)
                (close! out)))))
    [in out]))

(comment
  ;; 共有3个热狗,可提交3次
  (let [[in out] (hot-dog-machine-v2 3)]
    (>!! in 3)
    (println (<!! out))
    (>!! in 2)
    (println (<!! out))
    (>!! in 3)
    (println (<!! out))
    (>!! in 3)
    (println (<!! out))
    (>!! in 3)
    (println (<!! out)))

  )

以上是关于markdown core.async热狗的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你用TensorFlowKeras打造美剧《硅谷》中的“识别热狗”APP

Linux 的系统目录即热狗

Clojure 中的速率限制 core.async 通道

turtle画王思聪吃热狗(杨艳春,何金凝小组)

不再使用 clojure core.async 通道是不是应该关闭?

是否应该耗尽 clojure.core.async 通道以释放停放的 put