Age*_*404 1 if-statement list clojure
我是Clojure的新手,也是函数式编程的新手.我希望这会返回True或False,但它只是无限递归而且它似乎根本没有真实.
我的测试数据集如下:
(def y (list 1 2 3 4)) ; and I'm passing in 2 for X.
(defn occursIn [x y]
(if (= y nil)
"False"
(if (= x first y )
"True"
(occursIn x (rest y))
)
)
)
Run Code Online (Sandbox Code Playgroud)
试试这个,并请注意推荐的方式来格式化你的代码-不要离开自己的线路孤独的括号,他们不喜欢{}在其他编程语言:
(defn occursIn [x y]
(if (empty? y)
"False"
(if (= x (first y))
"True"
(occursIn x (rest y)))))
Run Code Online (Sandbox Code Playgroud)
你忘了打电话first给这个y名单,如下:
(first y)
Run Code Online (Sandbox Code Playgroud)
另外,请注意基本情况不按预期工作.请改用此测试:
(empty? y)
Run Code Online (Sandbox Code Playgroud)
为了完整起见,这里有一个更惯用的方法来编写相同的过程 - 但要注意@omiel在注释中指出的边缘情况,如果x是false或者这将无效nil:
(defn occursIn [x y]
(if (some #(= x %) y)
"True"
"False"))
Run Code Online (Sandbox Code Playgroud)
一个更好的解决方案,没有边缘案例 - 正如@mange在评论中所建议的那样:
(defn occursIn [x y]
(if (every? #(not= x %) y)
"False"
"True"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |