<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="../../coverage.css"/> <title> the_great_game/gossip/gossip.clj </title> </head> <body> <span class="covered" title="1 out of 1 forms covered"> 001 (ns the-great-game.gossip.gossip </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 002 "Interchange of news events between agents agents" </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 003 (:require [the-great-game.utils :refer [deep-merge]])) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 004 </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 005 ;; Note that habitual travellers are all gossip agents; specifically, at this </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 006 ;; stage, that means merchants. When merchants are moved we also need to </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 007 ;; update the location of the gossip with the same key. </span><br/> <span class="blank" title="0 out of 0 forms covered"> 008 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 009 (defn dialogue </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 010 "Dialogue between an `enquirer` and an `agent` in this `world`; returns a </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 011 map identical to `enquirer` except that its `:gossip` collection may have </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 012 additional entries." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 013 ;; TODO: not yet written, this is a stub. </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 014 [enquirer respondent world] </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 015 enquirer) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 016 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 017 (defn gather-news </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 018 ([world] </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 019 (reduce </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 020 deep-merge </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 021 world </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 022 (map </span><br/> <span class="not-covered" title="0 out of 4 forms covered"> 023 #(gather-news world %) </span><br/> <span class="not-covered" title="0 out of 5 forms covered"> 024 (keys (:gossips world))))) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 025 ([world gossip] </span><br/> <span class="not-covered" title="0 out of 7 forms covered"> 026 (let [g (cond (keyword? gossip) </span><br/> <span class="not-covered" title="0 out of 5 forms covered"> 027 (-> world :gossips gossip) </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 028 (map? gossip) </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 029 gossip)] </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 030 {:gossips </span><br/> <span class="not-covered" title="0 out of 4 forms covered"> 031 {(:id g) </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 032 (reduce </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 033 deep-merge </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 034 {} </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 035 (map </span><br/> <span class="not-covered" title="0 out of 5 forms covered"> 036 #(dialogue g % world) </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 037 (remove </span><br/> <span class="not-covered" title="0 out of 4 forms covered"> 038 #( = g %) </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 039 (filter </span><br/> <span class="not-covered" title="0 out of 8 forms covered"> 040 #(= (:location %) (:location g)) </span><br/> <span class="not-covered" title="0 out of 5 forms covered"> 041 (vals (:gossips world))))))}}))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 042 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 043 (defn move-gossip </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 044 "Return a world like this `world` but with this `gossip` moved to this </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 045 `new-location`. Many gossips are essentially shadow-records of agents of </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 046 other types, and the movement if the gossip should be controlled by the </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 047 run function of the type of the record they shadow. The [[#run]] function </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 048 below does NOT call this function." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 049 [gossip world new-location] </span><br/> <span class="not-covered" title="0 out of 4 forms covered"> 050 (let [id (cond </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 051 (map? gossip) </span><br/> <span class="not-covered" title="0 out of 7 forms covered"> 052 (-> world :gossips gossip :id) </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 053 (keyword? gossip) </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 054 gossip)] </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 055 (deep-merge </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 056 world </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 057 {:gossips </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 058 {id </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 059 {:location new-location}}}))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 060 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 061 (defn run </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 062 "Return a world like this `world`, with news items exchanged between gossip </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 063 agents." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 064 [world] </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 065 (gather-news world)) </span><br/> </body> </html>