计算过程
(a-plus-abs-b 1 1)
((if (> 1 0) + -) 1 1))
(+ 1 1)
user=> (defn a-plus-abs-b [a b] ((if (> b 0) + -) a b))
#'user/a-plus-abs-b
user=> (a-plus-abs-b 1 1)
2
user=> (a-plus-abs-b 1 -2)
3
函数(运算符)是一等函数,所有数据可以存在的地方 都可以存在。
user=> (defn p [] (p))
#'user/p
user=> (defn tests [x y](if (= x 0) 0 y))
#'user/tests
user=> (tests 0 (p))
Execution error (StackOverflowError) at user/p (form-init4467400003651161001.clj:1).
null
解释:
之所以出现StackOverflowError错误,是因为递归调用无止境,导致栈溢出。
这个是应用序所显示的内容,先计算再展开,导致无穷递归