Size: a a a

Clojure — русскоговорящее сообщество

2019 December 04

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
Терминальное условие по задумке, это иф с проверкой сообщения
источник

a

aodzaki.toko in Clojure — русскоговорящее сообщество
Alexey Chistiakov
(ns concurrentCore
 (:require [clojure.core.async :refer [>! <! >!! <!! go-loop go thread chan close!]]))

(def generate-random-number
 (partition 20 (take 100 (repeatedly #(rand-int 1000)))))

(def msg-chan (chan))
(def answer-chan (chan))

(defn search-number [array number]
 (let [array-part-1 (vec (nth array 0))
       array-part-2 (nth array 1)
       array-part-3 (nth array 2)
       array-part-4 (nth array 3)
       array-part-5 (nth array 4)]

   (println array-part-1)
   (println "P IDET V GO")

   (go-loop []
     (println "P vnutri go-loop")
     (if (= (<!! msg-chan) "I found a number!")
       (println "I am a process 1 and i finished!")
       (do
         (println "P vnutri if")
         (if (some #(= number %) array-part-1)
           (do
             (println "P vnutri loop")
             (>!! msg-chan "I found a number!")
             (let [index-of-number (.indexOf array-part-1 number)]
               (>!! answer-chan (str "The index of found number is: " index-of-number))))
           (println "I am a process 1 and i have not a number in my array's part!"))))
     (recur))

   (println (<!! answer-chan))
   (close! msg-chan)
   (close! answer-chan)))

(comment
 (search-number generate-random-number 175)
 )
как ранее было сказано, следует добавить переменные в loop и обрабатывать их в recur
https://clojuredocs.org/clojure.core/recur#example-542692d0c026201cdc326ea8
источник

a

aodzaki.toko in Clojure — русскоговорящее сообщество
Alexey Chistiakov
Терминальное условие по задумке, это иф с проверкой сообщения
👆
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
У меня был вариант через переменную в loop, которая atom изначально имело пустую строку, а в рекур я reset! делал на новое сообщение, но все было также
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Там не atom нужен, а просто переменная. Что-то наподобие:
(go
 (loop [msg nil
        i 0]
   (when-not (= msg "Foo")
     (recur (when (> i 3) "Foo") (inc i)))))
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
Там не atom нужен, а просто переменная. Что-то наподобие:
(go
 (loop [msg nil
        i 0]
   (when-not (= msg "Foo")
     (recur (when (> i 3) "Foo") (inc i)))))
А взаимодействие с каналом сообщений?
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Alexey Chistiakov
А взаимодействие с каналом сообщений?
А зачем?
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Оно нужно?
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
Потому что будет 5 go
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
И они синхронизироваться должны, я задумал через канал сообщений
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Тогда то же самое, только без переменных, а с каналами.
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
И recur в одной из веток условия, а не в конце.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
а не проще ли pmap-ом поискать?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
это будет x10 меньше кода
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
Уже написано pmap
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
И написан через map
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
Просто я ещё по времени сравниваю способы параллельного поиска числа в массиве
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
И решил проверить на core.async, я еще хотел с помощью future или promise написать
источник

AC

Alexey Chistiakov in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
И recur в одной из веток условия, а не в конце.
Спасибо, буду исправлять!
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
Там не atom нужен, а просто переменная. Что-то наподобие:
(go
 (loop [msg nil
        i 0]
   (when-not (= msg "Foo")
     (recur (when (> i 3) "Foo") (inc i)))))
в каком месте это переменная? :)
источник