J如何使方程式自身相乘?

时间:2011-02-21 09:08:16

标签: j

如何让这个等式自行乘以?

*/-.%~.q:36

再次重复数字36。顺便说一下,这是Euler的Totient功能。

enter image description here

我缺乏将此倍增的最后一步。

是的,我知道他们已经在jsoftware上拥有了这个功能的代码。但我正试图分解代码并学习。

很抱歉问这么简单的问题。在谷歌上找到J的帮助真的很难。

4 个答案:

答案 0 :(得分:2)

再次使用该值的最直接方法是再次包含该值。

   */ 36, -. % ~. q: 36
12

名称可用于该值。

   */ y, -. % ~. q: y=. 36
12

可以定义动词。该名称是本地名称。

   etf=: verb : '*/ y, -. % ~. q: y'
   etf 36
12

同一个动词可以用默认的形式表达。在这种形式中,参数是隐含的,而不是命名的。这里使用参数值两次的关键是在括号内创建the hook

   etfT=: */ @ ( , -. @ % @ ~. @ q: )
   etfT 36
12

答案 1 :(得分:1)

简短回答

y * (f y)

(* f) y

更长的答案

你有一个

的案例
y f (g (y))

其中f是二元*,而g是您已经拥有的函数:*/-.%~.q:。现在,y f (g(y))只会转换为“火车”(f g) y(正如您在manual看到的那样)。使用Cap [: * 来括号g

g =: [: */ [: -. [: % [: ~. q:

我们终于有了:

phi =: * g
phi 36
12

(* [: */ [: -. [: % [: ~. q:) 36
12

*您可以使用AtopAt来构建函数g,但对于列车来说,Cap通常更清晰。

答案 2 :(得分:0)

好的,我想出了什么。

(* */@:-.@:%@~.@q:)36

答案 3 :(得分:0)

在我玩这个函数试图找出它的工作原理和研究之类的东西之后(我只有第二年的微积分背景),我回头看了一个关于素数函数p:的旧标签,发现J内置了Euler的赋值函数5&p: