2015-08-11 10:57 GMT+02:00 Thomas Morley <thomasmorle...@gmail.com>:
> 2015-08-11 8:19 GMT+02:00 David Kastrup <d...@gnu.org>:
> [...]
>>
>> Well, how about something like
>>
>> (define (integer-and-fraction nmbr)
>>   (let* ((wh (truncate nmbr)) (rem (- nmbr wh)))
>>     (if (or (zero? wh) (zero? rem)) (format #f "~s" nmbr)
>>       (format #f "~s ~s" wh (abs rem)))))
>>
>> (display (integer-and-fraction (/ 1111 7)))
>>
>> Of course the disadvantage being that you cannot distinguish between one
>> and two numbers and cannot read the number back in easily.
>>
>> --
>> David Kastrup
>
> Will have a closer look later, I'm in a hurry.
>
> Many thanks,
>   Harm

I've got another suggestion from Andrew Bernard (agreeing to make it public)

Here both:

%% In a .ly-file:
%% Andrew:
#(define (mixed-num x)
  (let* ((n (numerator x))
         (d (denominator x)))
    (cons (truncate (/ n d)) (/ (modulo n d) d))))

%% David:
#(define (integer-and-fraction nmbr)
  (let* ((wh (truncate nmbr))
         (rem (- nmbr wh)))
      (if (or (zero? wh) (zero? rem))
          (format #f "~s" nmbr)
          (format #f "~s ~s" wh (abs rem)))))

#(write-me "mixed-num:\n"
  (map mixed-num (iota 40 0 (/ 5 7))))

#(write-me "integer-and-fraction:\n"
  (map integer-and-fraction (iota 40 -1 (/ 5 7))))


Some thoughts for the record:

Ofcourse the two suggestions return different type of output, pairs or strings.
(Wouldn't be too hard to let return both strings or pairs or whatever, though.)

`mixed-num' can't deal with negative input right now, returning wrong
(could be fixed ofcourse).

In case the input is not exact `mixed-num' crashes, whereas
`integer-and-fraction' doesn't, although returning not a fraction.

I think I'll go for `integer-and-fraction' and add an `exact?'-condition.


Thanks tons both,
  Harm

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to