2010-06-02 2 views
2

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

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

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

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

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

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

Разъяснение

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

digits =: 3 : 0 "0 
    "."[email protected]": y 
)

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

+0

Еще раз, я, возможно, ответил на мой собственный вопрос: 'digitalSum = (" "+/@ :(0) @" :)" 0' Однако, возможно, есть еще один способ, так что я оставим вопрос открытым. –

ответ

1

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

+0

Мне не пришло в голову, что это будет работать на поездах, но теперь это кажется довольно очевидным. –