Причина, скажем, cos/1
работает в q
, но не k
, заключается в том, что q
не имеет двойственности. То есть все операторы q
не перегружены валентностью, как отмечено в разделе 6.1.2 в q4m .
с любым из наречий q
(каждый: '
, поверх: /
сканирование: \
, ранее: :
, каждое право: /:
, каждый лево: \:
) результирующая производная функция интерпретируется q
как диади c, если только вы не используете [] для конкретной передачи одного аргумента.
Для приведенного выше примера q
интерпретирует cos/
как do вместо сходящихся и поэтому требует левый аргумент, указывающий количество итераций (обратите внимание на результаты 0 cos/ 1
, 1 cos/ 1
, 2 cos/ 1
, et c.). Предпочтительным способом разрешения является использование []: cos/[1]
.
(cos/) 1
работает, потому что пользовательские функции никогда не могут использовать инфиксную нотацию, поэтому выражение автоматически интерпретируется как монадическое применение. Это также, почему 2 (cos/) 1
терпит неудачу. Чтобы решить эту проблему, вам снова придется использовать []: (cos/)[2;1]
.