Вот функция для вычисления цифровой суммы числа в J:
digitalSum =: +/@:("."0)@":
Если я использую b.
для запроса ранга этого глагола, я получаю _ 1 _
, то есть бесконечно. (Мы можем игнорировать двоичный случай, поскольку digitalSum
не является двоичным.)
Я бы хотел, чтобы монадический ранг этого глагола был равен 0, как сообщает b.
. Единственный способ, которым я знаю, это использовать «прокладку», например,
ds =: +/@:("."0)@":
digitalSum =: ds"0
Это прекрасно работает, но я хочу знать, единственный ли это способ сделать это, или я что-то упускаю.
Разъяснение
Я только что обнаружил, как изменить ранг глагола, который определен так:
digits =: 3 : 0 "0
"."0@": y
)
Обратите внимание на "0
после объявления 3 : 0
. Вы можете поместить любое наречие или соединение по вашему желанию, и оно будет применено к глаголу в целом. Довольно классная штука!