Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过指定关键字和值从clojure中保存hashmaps的集合中获取特定数据_Clojure - Fatal编程技术网

如何通过指定关键字和值从clojure中保存hashmaps的集合中获取特定数据

如何通过指定关键字和值从clojure中保存hashmaps的集合中获取特定数据,clojure,Clojure,如何通过在中指定:id和:id的值来查找名称olle (def persons #{{:id 1 :name "olle"} {:id 2 :name "anna"}}) 我需要一些函数来获取匹配的行,以便能够访问值和键 我正在尝试在clojure中实现SQL语法,这是一个学校作业,所以我不需要代码,更像是关于如何进行的提示。到目前为止,我知道可以使用函数get和clojure.set/select 最终,我试图实现的是对这条语句进行解析和解释 select [

如何通过在中指定:id和:id的值来查找名称olle

(def persons #{{:id 1 :name "olle"} 
               {:id 2 :name "anna"}})
我需要一些函数来获取匹配的行,以便能够访问值和键

我正在尝试在clojure中实现SQL语法,这是一个学校作业,所以我不需要代码,更像是关于如何进行的提示。到目前为止,我知道可以使用函数get和clojure.set/select

最终,我试图实现的是对这条语句进行解析和解释

select [name]
from persons
where id=1

->"olle"
这就是我一直在测试的东西,到目前为止没有结果

    (persons :id 1 :name) 
    ;=> :name "olle"
    => (clojure.set/select :id #{1})
    #{}
    => (clojure.set/select odd? #{1})
    #{1}

我也玩过“进入”游戏,但我仍然没有在集合和集合中的哈希映射中获得移动的感觉,以至于我可以继续编码,而且我不确定我是否需要在这个作业中定义任何语法代码,或者我是否可以只编写算法?

首先,每个定义都不是一个列表,而是一个集合,其中每个元素都是一个哈希映射。由于这是一项作业,我不会提供完整的代码,但我会说,您的答案可以很好地利用和。

提示:

(clojure.set/select #(= 1 (:id %)) persons)
;=> #{{:name "olle", :id 1}}
(clojure.set/project *1 [:name])
;=> #{{:name "olle"}}

假设您的任务是要求您从类似SQL的DSL中进行宏转换。所以,你有两个部分需要弄清楚-首先,我如何用普通函数来实现这一点?其次,我如何使用宏实现转换?

你很幸运,你的学校正在教授Clojure!请参阅clojure.set/select。如果我的编辑过于激烈,您可以将其回滚。只是想帮忙,别担心!感谢您的帮助任务是实现类似clojure中的SQL语法,这些是唯一的选项卡,您能给我一个关于如何使用get-in的提示吗?我尝试了get-in的不同方法,但遇到了麻烦,我对这种语言的基本原理知之甚少。我不确定我是否可以使用get-in,因为我需要在结尾处获得类似的内容,从表1中选择[:id],其中name=johnNarrow向下搜索您的问题,如果您需要帮助,请显示一些研究成果。如果您的问题是,如何在Clojure中实现SQL语法?应该投票关闭,因为它太宽了。谢谢,是的,确切地说,分配说明应该解析以下规则并返回值,从{table}中选择[columns],其中:cell name=| in |>|<|!=|像value orderby:cell name一样,我在这里也找到了一些很好的答案:感谢从{table}位选择[columns]相当于clojure.set/project{table}[columns],where子句可以在clojure.set/select的帮助下实现。因此,首先确保可以使用函数执行所有选项,然后尝试宏转换。你的作业可能更多的是关于宏的,但是你必须首先理解你转换到的代码。我真的在努力解决这个问题,我应该如何定义从何处选择orderby,是正确的方法吗?