假设我有以下J表达式:
# 3 ((|=0:)#]) 1+i.1000
这计算1到1000之间可被3整除的数字的数量。(现在,在任何人指出有更简单的方法可以做到这一点之前,这个问题是关于 J ,不数学。)
假设我为此定义了一个monadic函数,如下所示:
f =: monad define # y ((|=0:)#]) 1+i.1000 )
这适用于单个参数,例如,
f 4 250
如果我传入列表,我会收到长度错误:
f 1 2 3 |length error: f
现在,我完全明白为什么我会得到长度错误。当您将列表1 2 3
替换为monad的y
参数时,您会得到:
# 1 2 3 ((|=0:)#]) 1+i.1000
如果您对J有所了解,那么很明显为什么会发生长度错误。所以,我不需要解释。
我想定义这个函数,当我传递一个列表时,它返回一个列表,例如,
f 1 2 3 1000 500 333
我怎样才能(a)重新定义此函数以获取列表并返回列表或(b)使函数按原样处理列表而不重新定义,可能使用某些副词或其他技术?
答案 0 :(得分:1)
这是针对(b)案例:
(f@{. , $:@}.) ^: (0 < #) 1 2 3
1000 500 333
答案 1 :(得分:1)
我建议使用更简单的方法将动词定义为零等级。使用您提供的动词,这是一个简单的方法:
f =: monad define "0
# y ((|=0:)#]) 1+i.1000
)
f 1 2 3
1000 500 333
唯一的变化是在'define'之后添加了"0
。