[chuck-users] making a duration into a string?

Andrew Turley aturley at acm.org
Sat Jan 9 17:11:54 EST 2010


So are you looking for something like this?

fun void log(string s) {
  <<<s>>>;
}

fun string stringify(dur d) {
  return "" + ((d / (1::second))) + " seconds";
}

fun string stringify(time t) {
  return "" + ((t / (1::second))) + " seconds";
}

1::second => dur d1;
log("d1 is " + stringify(d1)); // "d1 is 1 seconds"
300::samp => dur d2;
log("d2 is " + stringify(d2)); // "d2 is 0.0068 seconds"

now + 60::second => time t1;
log("t1 is " + stringify(t1)); // "t1 is 60 seconds"
now + 1::minute => time t2;
log("t2 is " + stringify(t2)); // "t2 is 60 seconds"

Or are you trying to do something else?

Understand that times are represented as a delta of the number of
samples since the VM (or maybe it's the shred) started executing.
Again, the time itself doesn't carry any information about how it was
created, so these two times would have the same representation if they
were created at the same time:

now + 1::minute => time t1;
now + 60::second => time t2;

And these two times have different representations since they are not
created at the same time:

now + 1::minute => time t1;
5::second => now;
now + 60::second => time t2;

andy

On Sat, Jan 9, 2010 at 1:16 PM, Robert Poor <rdpoor at gmail.com> wrote:
> Sure, can do, but this is only for debugging -- I'd welcome a means to
> get the same effect as
>  <<< "duration is", d >>>;
> which obviously works, but not as a string.  Same comments apply for
> stringifying a time value.
>
> - Rob
>
> On Sat, Jan 9, 2010 at 13:08, Andrew Turley <aturley at acm.org> wrote:
>> Are you looking for a way to generate something that would ultimately
>> generate a string that contains "1::second"? Because if that's the
>> case, you probably can't do it. Durations ultimately get stored as
>> floats that represent the number of samples in the duration. And they
>> don't, as far as I know, retain any information about the units that
>> were used when they were created. So 6::second and 0.1::minute will
>> both be stored as the number of samples that are contained in a 6
>> second interval.
>>
>> Now, what you can do is convert the duration to a float by doing this:
>>
>> 1::second => dur d;
>> d / (1::samp) => float dSamp;
>>
>> And then you could convert that float to a string. Now what you
>> probably want is a duration in terms of time rather than samples, so
>> you could also get the number of samples per second and divide dSamp
>> by that number, and then store your duration as a string
>> representation of a floating point number represented in terms of
>> seconds (or maybe you want milliseconds).
>>
>> andy
>>
>> On Sat, Jan 9, 2010 at 12:50 PM, Robert Poor <rdpoor at gmail.com> wrote:
>>> How can I cast a duration into a string (e.g. for passing as a string
>>> argument)?  Consider:
>>>
>>> // =============
>>> fun void log(string message) {
>>>  // do something to log the message
>>> }
>>>
>>> 1::second => dur d;
>>> log("the duration is " + d);  // fails with "cannot perform '+' on
>>> object references"
>>> log("the duration is " + d.toString()); // fails with "type 'dur' does
>>> not have members"
>>> // =============
>>>
>>> Same question for time objects.
>>>
>>> TIA.
>>>
>>> - Rob
>>> _______________________________________________
>>> chuck-users mailing list
>>> chuck-users at lists.cs.princeton.edu
>>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>>>
>> _______________________________________________
>> chuck-users mailing list
>> chuck-users at lists.cs.princeton.edu
>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>>
>


More information about the chuck-users mailing list