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