默写 `4 : '$ x (<") y'`
Write `4 : '$ x (<") y'` tacitly
如何写默认的frame
函数? (来自《学习杂志》第 7 章)
我正在使用第 8 章的 f x g y = x f@:g y
构图方案,但它不起作用。我的猜测是因为 <"
没有自然排名?
x=.1
y=.i.2 3 4
f=.$
g=.<"
frame_e=.4 :'f x g y'
frame_t=.f@:g
x frame_e y NB. -> 2 3, which is the x-frame of y
x frame_t y NB. -> domain error
NB. No natural rank
g b.0 NB. -> syntax error
0 g b.0 NB. -> 0 0 0
我确认该模式与我预期的其他功能一样有效。
x=.1
y=.i.2 3 4
f=.+/
g=.*
f x g y NB. -> equiv of 12+2*i.3 4
x f@:g y NB. -> same
默认情况下,我会使用
framet=. {. $
2 framet i. 2 3 4
2 3
但这并没有真正触及您问题的根源,对吗?
问题确实是 g
的定义方式:
g=.<"
这不会使 g
成为动词,而是成为副词。它确实使用显式定义中的 x
来创建动词,但它需要在使用该动词计算 y 之前执行此操作。据我所知,J 不允许您暂存这些过程。如您所见,当 f
和 g
实际上是动词时,该模式确实有效。
我发现隐式编程很优雅,但它在某些方面可能会更慢,而且在某些方面它是有限的。
希望有人能给出更好的答案,这样我也可以学习。
如何写默认的frame
函数? (来自《学习杂志》第 7 章)
我正在使用第 8 章的 f x g y = x f@:g y
构图方案,但它不起作用。我的猜测是因为 <"
没有自然排名?
x=.1
y=.i.2 3 4
f=.$
g=.<"
frame_e=.4 :'f x g y'
frame_t=.f@:g
x frame_e y NB. -> 2 3, which is the x-frame of y
x frame_t y NB. -> domain error
NB. No natural rank
g b.0 NB. -> syntax error
0 g b.0 NB. -> 0 0 0
我确认该模式与我预期的其他功能一样有效。
x=.1
y=.i.2 3 4
f=.+/
g=.*
f x g y NB. -> equiv of 12+2*i.3 4
x f@:g y NB. -> same
默认情况下,我会使用
framet=. {. $
2 framet i. 2 3 4
2 3
但这并没有真正触及您问题的根源,对吗?
问题确实是 g
的定义方式:
g=.<"
这不会使 g
成为动词,而是成为副词。它确实使用显式定义中的 x
来创建动词,但它需要在使用该动词计算 y 之前执行此操作。据我所知,J 不允许您暂存这些过程。如您所见,当 f
和 g
实际上是动词时,该模式确实有效。
我发现隐式编程很优雅,但它在某些方面可能会更慢,而且在某些方面它是有限的。
希望有人能给出更好的答案,这样我也可以学习。