views:

28

answers:

1

Here's a function to calculate the digital sum of a number in J:

digitalSum =: +/@:("."0)@":

If I use b. to query the rank of this verb, I get _ 1 _, i.e., infinite. (We can ignore the dyadic case since digitalSum is not dyadic.)

I would like the monadic rank of this verb to be 0, as reported by b.. The only way I know of to do this is to use a "shim", e.g.,

ds =: +/@:("."0)@":
digitalSum =: ds"0

This works great, but I want to know whether it's the only way to do this, or if there's something else I'm missing.

Clarification

I just discovered how to change the rank of a verb that's defined thus:

digits =: 3 : 0 "0
    "."0@": y
)

Notice the "0 after the declaring 3 : 0. You can put any adverb or conjunction you wish, and it will be applied to the verb as a whole. Pretty cool stuff!

+1  A: 

digitalSum =: (+/@:("."0)@":)"0 is how I would define it as well. Using " to change rank is pretty standard and works on parenthesized tacit trains.

David
It hadn't occurred to me that it would work on trains, but it now seems pretty obvious.
Gregory Higley