Установка ранга пользовательского глагола в J - PullRequest
2 голосов
/ 03 июня 2010

Вот функция для вычисления цифровой суммы числа в J:

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

Если я использую b. для запроса ранга этого глагола, я получаю _ 1 _, то есть бесконечно. (Мы можем игнорировать двоичный случай, поскольку digitalSum не является двоичным.)

Я бы хотел, чтобы монадический ранг этого глагола был равен 0, как сообщает b.. Единственный способ, которым я знаю, это использовать «прокладку», например,

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

Это прекрасно работает, но я хочу знать, единственный ли это способ сделать это, или я что-то упускаю.

Разъяснение

Я только что обнаружил, как изменить ранг глагола, который определен так:

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

Обратите внимание на "0 после объявления 3 : 0. Вы можете поместить любое наречие или соединение по вашему желанию, и оно будет применено к глаголу в целом. Довольно классная штука!

1 Ответ

1 голос
/ 03 июня 2010

digitalSum =: (+/@:("."0)@":)"0 так я бы и определил. Использование " для изменения ранга довольно стандартно и работает с молчаливыми поездами в скобках.

...