Tôi đã viết 3 hàm đếm số lần một phần tử xuất hiện trong danh sách. Tôi đã thử nhiều đầu vào khác nhau và lược tả nó nhưng tôi vẫn không biết chức năng nào là tốt nhất về hiệu quả sử dụng và hiệu quả thời gian của ngăn xếp. Hãy giúp tôi ra.Chức năng nào là tốt nhất về hiệu quả sử dụng ngăn xếp và thời gian
;; Using an accumulator
(defn count-instances1 [a-list an-element]
(letfn [(count-aux [list-aux acc]
(cond
(empty? list-aux) acc
:else (if (= (first list-aux) an-element)
(count-aux (rest list-aux) (inc acc))
(count-aux (rest list-aux) acc))))]
(count-aux a-list 0)))
;; Normal counting
(defn count-instances2 [a-list an-element]
(cond
(empty? a-list) 0
:else
(if (= (first a-list) an-element)
(+ 1 (count-instances2 (rest a-list) an-element))
(count-instances2 (rest a-list) an-element))))
;; using loop. does this help at all?
(defn count-instances3 [a-list an-element]
(loop [mylist a-list acount 0]
(if (empty? mylist)
acount
(if (= (first mylist) an-element)
(recur (rest mylist)(inc acount))
(recur (rest mylist) acount)))))
Kết quả của những nỗ lực lược tả của bạn là gì? –
Nested 'defn' có lẽ không làm những gì bạn nghĩ. 'defn' luôn định nghĩa một hàm toplevel. Bạn có thể sử dụng 'letfn' (hoặc thậm chí' (cho phép [f (fn ...)]) ') nếu bạn muốn định nghĩa một hàm bên trong. –
Cảm ơn Brian. Nhưng tôi không thể nhận được letfn để làm việc. Bạn có thể chỉnh sửa câu hỏi của tôi với letfn không? Cảm ơn rất nhiều. – unj2