球拍函数调用计数
Racket Function Calls Count
大家好,
因此,在我永无止境地学习更多球拍的过程中,我正在努力了解 set!调用以及如何将其用作计算函数调用的计数器。
我编写了一些依赖于比较运算符(即:<、>、<=)的基本排序算法(合并、插入、快速),我想知道该运算符被调用了多少次来尝试并计算出它的效率。我正在使用的代码格式是:
(count-compares sort compare? lst)
我编码的排序方式sort在哪里,对比一下?是比较运算符,lst 是要排序的整数列表。如果您认为有更好的方法,我愿意更改格式。
我知道比较?需要中断(使用另一个功能??)来包含一个集合!,但我不知道该怎么做。有人对从哪里开始有任何建议吗?
谢谢! <3
计算模拟函数被调用次数的mock package makes counting calls of functions like compare?
much easier. It provides the mock-num-calls
函数。
#lang racket
(require mock)
;; count-compares :
;; ∀[X] [(Listof X) [X X -> Bool] -> (Listof X)] [X X -> Bool] (Listof X) -> Nat
(define (count-compares sort compare? lst)
; mock-compare? is a function that behaves just like compare?, except that
; it keeps track of the information of how it's called, so that it can be
; counted later.
(define mock-compare? (mock #:behavior compare?))
; sort the list using the mock function
(sort lst mock-compare?)
; count the number of times the mock function was called
(mock-num-calls mock-compare?))
尝试一下:
(count-compares sort < '(6 2 8 3 1 8 5 3 0 7 1 7 9 5 8))
; 41, in Racket version 6.11
不用任何包直接搞定!
在所有方法之外定义一个var:
(定义 count-comp 0)
在你的比较函数中添加语句
(set!count-comp (+ count-comp 1))
以后使用
(显示计数补偿)
(set!count-comp 0)
大家好,
因此,在我永无止境地学习更多球拍的过程中,我正在努力了解 set!调用以及如何将其用作计算函数调用的计数器。
我编写了一些依赖于比较运算符(即:<、>、<=)的基本排序算法(合并、插入、快速),我想知道该运算符被调用了多少次来尝试并计算出它的效率。我正在使用的代码格式是:
(count-compares sort compare? lst)
我编码的排序方式sort在哪里,对比一下?是比较运算符,lst 是要排序的整数列表。如果您认为有更好的方法,我愿意更改格式。
我知道比较?需要中断(使用另一个功能??)来包含一个集合!,但我不知道该怎么做。有人对从哪里开始有任何建议吗?
谢谢! <3
计算模拟函数被调用次数的mock package makes counting calls of functions like compare?
much easier. It provides the mock-num-calls
函数。
#lang racket
(require mock)
;; count-compares :
;; ∀[X] [(Listof X) [X X -> Bool] -> (Listof X)] [X X -> Bool] (Listof X) -> Nat
(define (count-compares sort compare? lst)
; mock-compare? is a function that behaves just like compare?, except that
; it keeps track of the information of how it's called, so that it can be
; counted later.
(define mock-compare? (mock #:behavior compare?))
; sort the list using the mock function
(sort lst mock-compare?)
; count the number of times the mock function was called
(mock-num-calls mock-compare?))
尝试一下:
(count-compares sort < '(6 2 8 3 1 8 5 3 0 7 1 7 9 5 8))
; 41, in Racket version 6.11
不用任何包直接搞定!
在所有方法之外定义一个var: (定义 count-comp 0)
在你的比较函数中添加语句 (set!count-comp (+ count-comp 1))
以后使用 (显示计数补偿) (set!count-comp 0)