Ello朋友,
我对这个问题感到非常愚蠢......但是,在对这个问题挣扎一段时间之后,我已经决定用另一双眼睛来帮助阐明我的问题。
我试图循环浏览两个记录和一个地图(我可能同时将地图重写为记录,但我没有必要),比较一些条目,并在条目匹配时更改值。我所拥有的与此类似:
编辑:这是尝试具体描述我正在做的事情。但是,现在我想起来或许这不是最好的方法。我试图使用clojure为AI课程创建一个餐厅选择推理引擎。我对clojure的经验很少,但最初想创建名为" restaurant"这样我就可以创建它的多个实例。我读过clojure中的结构已被弃用,所以要使用记录。从文本文件中读入的餐馆和用户输入都被存储为' restaurant'记录。
我从先前排序的文本文件数据库中读入了相关餐馆的属性(名称,菜肴类型,评级,位置,价格等),然后将它们放入矢量中。
每个属性都有一个与之关联的权重,以便当用户输入搜索条件时,可以根据最有可能是最重要的项目(例如,餐厅)按最大到最不相关的顺序对餐馆进行排序名字是最重要的项目,其次是美食类型,然后评级等。)。因此,该记录还具有相关性'属性。
Event
因此,我们的想法是每个餐馆都经过迭代,并将属性值与用户的输入值进行比较。如果存在匹配,则将本地相关性值变量添加到其中的相关权重值。之后将其放入矢量,排序并返回。然后可以将结果显示给用户。理想情况下,-main中的示例将打印最相关餐厅的名称。
答案 0 :(得分:0)
正如评论所解释的那样,你必须掌握本机Clojure数据结构的不可变性。您不应该使用doseq
- 这可以通过副作用 - 用于您的基本算法。
relevance
属性不属性为Restaurant
。对于某种计算相关性的模式,您想要的是构建从餐馆到相关性的地图。然后,您希望按值对此地图进行排序。标准的排序映射不会这样做 - 它按键排序。您可以对地图条目进行排序,但是有一个现成的priority map可以自动提供您需要的结果。
您还必须决定如何识别餐馆,就像数据库一样。如果resturant-name
是唯一的,他们就会这样做。如果没有,您可能会更好地使用人工识别符,例如数字。您可以将这些作为餐馆地图的关键字,以及将您订购的地图。