**Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.13/$rootScope/infdig?p0=10&p1=%5B%5D
at REGEX_STRING_REGEXP (ionic.bundle.js:8762)
at Scope.promises.$get.Scope.$digest (ionic.bundle.js:22980)
at Scope.promises.$get.Scope.$apply (ionic.bundle.js:23205)
at done (ionic.bundle.js:18358)
at completeRequest (ionic.bundle.js:18548)
at XMLHttpRequest.requestLoaded (ionic.bundle.js:18489)(anonymous function) @ ionic.bundle.js:20306jqNodes.$get @ ionic.bundle.js:17256promises.$get.Scope.$apply @ ionic.bundle.js:23207done @ ionic.bundle.js:18358completeRequest @ ionic.bundle.js:18548requestLoaded @ ionic.bundle.js:18489
ionic.bundle.js:8762 Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.13/$rootScope/infdig?p0=10&p1=%5B%5DREGEX_STRING_REGEXP @ ionic.bundle.js:8762promises.$get.Scope.$digest @ ionic.bundle.js:22980promises.$get.Scope.$apply @ ionic.bundle.js:23205done @ ionic.bundle.js:18358completeRequest @ ionic.bundle.js:18548requestLoaded @ ionic.bundle.js:18489
ionic.bundle.js:20306 Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.13/$rootScope/infdig?p0=10&p1=%5B%5D
at REGEX_STRING_REGEXP (ionic.bundle.js:8762)
at Scope.promises.$get.Scope.$digest (ionic.bundle.js:22980)
at Scope.promises.$get.Scope.$apply (ionic.bundle.js:23205)
at done (ionic.bundle.js:18358)
at completeRequest (ionic.bundle.js:18548)
at XMLHttpRequest.requestLoaded**
)
您好,这是尾递归函数的方案递归函数。 cond部分似乎有问题,因为它开始陷入循环。可能存在语法错误,因为当我在终端中尝试时,代码行似乎单独工作。
答案 0 :(得分:2)
我将根据两个见解重新制定你的功能:
list-ref
和list-set!
都是O(n)操作。)这里是我如何使用相同的算法重写函数(注意你的排序不容易实现而没有变异(相比之下,你可以实现mergesort而没有任何变异),所以我的版本仍然有一些变异,但不如你的那么多; - )):
(define (sort! lst)
(let outer ((lhs lst))
(unless (null? lhs)
(let inner ((rhs (cdr lhs)))
(if (null? rhs)
(outer (cdr lhs))
(let ((a (car lhs))
(b (car rhs)))
(when (> a b)
(set-car! lhs b)
(set-car! rhs a))
(inner (cdr rhs))))))))
请注意,使用此内/外循环结构比您拥有的cond
更干净,因此我的版本根本不使用cond
。
使用示例(在Guile上测试):
> (define lst (list 3 1 4 1 5 9)) ; important: **not** '(3 1 4 1 5 9)
> (sort! lst)
> lst
(1 1 3 4 5 9)
如果您想使用随机访问数据结构,那么在Scheme中称为 vector 。这里的矢量算法相同:
(define (sort! vec)
(let outer ((i 0))
(unless (>= i (vector-length vec))
(let inner ((j (+ i 1)))
(if (>= j (vector-length vec))
(outer (+ i 1))
(let ((a (vector-ref vec i))
(b (vector-ref vec j)))
(when (> a b)
(vector-set! vec i b)
(vector-set! vec j a))
(inner (+ j 1))))))))
请注意,我使用i
和j
作为左手和右手矢量索引,而不是lhs
和rhs
左手和右手 - 手"游标"我用于列表版本。
示例用法(在Racket上测试):
> (define vec (vector 3 1 4 1 5 9))
> (sort! vec)
> vec
#(1 1 3 4 5 9)