我正在创建一个重载函数,它将一个数字列表作为参数(以及一个数字列表和重载签名中的单个数字).从此列表中,必须找到并返回最高值.我知道可用的"排序"方法,它自动为您排序列表,但我试图使用递归发现最高值.以下是我正在使用的代码.
32 (defn my-max
33 ([list]
34 (if (empty? list)
35 -1
36 (my-max (pop list) (first list))) ; recursive call
37 )
38 ([list high]
39 (if (empty? list) ; base case
40 high)
41 (if (> (first list) high)
42 (my-max (pop list) (first list)))
43 (my-max (pop list) high))
44 )
45
46 (println (my-max '(1 2 3)))
Run Code Online (Sandbox Code Playgroud)
如您所见,我对包含1,2和3的列表进行了硬编码,其中应返回3个.运行代码时收到错误:
Exception in thread "main" java.lang.NullPointerException
at clojure.lang.Numbers.ops(Numbers.java:942)
at clojure.lang.Numbers.gt(Numbers.java:227)
at user$my_max.invoke(HelloWorld.clj:41)
at user$my_max.invoke(HelloWorld.clj:42)
at user$my_max.invoke(HelloWorld.clj:42)
at user$my_max.invoke(HelloWorld.clj:36)
at …Run Code Online (Sandbox Code Playgroud)