Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an equivalent to Lisp's "runtime" primitive in Scheme?

According to SICP section 1.2.6, exercise 1.22:

Most Lisp implementations include a primitive called runtime that returns an integer that specifies the amount of time the system has been running (measured, for example, in microseconds).

I'm using DrScheme, where runtime doesn't seem to be available, so I'm looking for a good substitute. I found in the PLT-Scheme Reference that there is a current-milliseconds primitive. Does anyone know if there's a timer in Scheme with better resolution?

like image 624
Bill the Lizard Avatar asked Feb 03 '10 20:02

Bill the Lizard


4 Answers

current-milliseconds is a function that returns the current millisecond count from the system, but it might decrease. current-inexact-milliseconds is similar, but returns a guaranteed-to-increase floating point number.

There are also a bunch of similar functions that you can find on that page, but if all you need is to time a certain function, then just use (time expr) and it will print out the time it took to evaluate the expression.

Another thing that is relevant here is the profiler, in case you need some more verbose analysis of your code.

like image 102
Eli Barzilay Avatar answered Oct 22 '22 02:10

Eli Barzilay


I too came across this problem today. I am using DrRacket, as it seems to have superseded DrScheme. Though this is an old thread, I am adding my findings for anyone new who stumbles across this thread.

With R5RS (#lang r5rs) as selected language, add following two lines before the program to make it work

(#%require (only racket/base current-milliseconds))
(define (runtime) (current-milliseconds))
like image 29
patentfox Avatar answered Oct 22 '22 03:10

patentfox


You can use the package sicp that contains definition of the runtime.

Here is the package description.

And here is the installation instructions:

  • Open the Package Manager: in DrRacket choose the menu File then choose Package Manager….

  • In the tab Do What I Mean find the text field and enter: sicp

  • Finally click the Install button.

Now you can call runtime and other procedures from SICP:

#lang sicp
(runtime)

An expected output would be like this:

1606611898030115
> 
like image 2
Mark Shevchenko Avatar answered Oct 22 '22 03:10

Mark Shevchenko


I'm using mit-scheme to do SICP and have found that milliseconds is given by (real-time-clock) as per the user manual.

like image 1
mwal Avatar answered Oct 22 '22 04:10

mwal