J, создание функции - PullRequest
       30

J, создание функции

3 голосов
/ 21 ноября 2010

Я только начал изучать J и попытался создать функцию, которая проверяет, является ли число простым.

<./<./13|*/~(2}.i.)13

Проверяет, является ли 13 простым, и возвращает 1.

<./<./10|*/~(2}.i.)10

И это вернет 0.

Итак, мой вопрос: как мне сделать из этого функцию? Как мне указать аргумент?

prime(x) =: <./<./x|*/~(2}.i.)x

Это, конечно, не сработает. Но как я могу создать эту функцию в J?

PS. Я знаю, что функция не работает для 2, я буду иметь дело с этим позже: D

1 Ответ

6 голосов
/ 22 ноября 2010

Чтобы заменить конкретные значения в этих предложениях именованным параметром, вы можете использовать скрипт, например, такой:

   prime=: verb :'<./<./y|*/~(2}.i.)y'
   prime 13
1
   prime 10
0

(Здесь слово «глагол» просто 3. Оно действует какоставленный параметр для двоеточия, в то время как тело сценария является правильным параметром двоеточия, но не стесняйтесь некоторое время игнорировать эту деталь и рассматривать как шаблон «глагол:» перед цитируемым телом сценария.)

Вы заметите, что я использовал y, а не x, в качестве имени параметра.В явной форме J левый параметр равен x (если он есть), а правый параметр y.

Для глагола естественно, что глагол получает массивы неопределенной формы, но определенный выше будет ошибка, еслидано что угодно, кроме скаляра.Вот способ исправить это:

   prime=: (verb :'<./<./y|*/~(2}.i.)y')"0
   prime 10 11 12 13
0 1 0 1

В стилистическом плане повторение <./ (наименьшее среди) может не отражать ваши намерения, а также это: </p>

   prime=: (verb :'<./ , y|*/~(2}.i.)y')"0

Хотелось бы отметить, что хотя подобные программы отлично подходят для изучения языка, определение, является ли число простым, обрабатывается J-первичным.Этот символ, p:, обычно используется.Если назначенное имя было желательным, и была выбрана явная форма, вот типичное определение:

   prime=: verb :'1 p: y'

Как и прежде, y будет интерпретироваться как значение правильного параметра именованного глагола ("prime")).

В итоге: для указания аргументов вместо конкретных значений используется явная форма.Это включает в себя сценарий, то есть текст.В явных глаголах напишите 'x' и 'y' как левый и правый аргументы соответственно.Если вы используете только один аргумент, это 'y'.

J программисты часто используют молчаливую форму.В неявной форме нет сценария, и аргументы всегда подразумеваются, а не указываются.(Нет проблем с работой в явном виде, когда это более удобно.) «Явное» называется так, потому что в этом виде аргументы указываются явно.

...