簡體   English   中英

默寫`4 : '$ x (<") y'`

[英]Write `4 : '$ x (<") y'` tacitly

怎么默寫frame函數? (來自“學習J”第7章)

我正在使用 Ch 8 中的fxgy = xf@:gy組合方案,但它不起作用。 我的猜測是因為<"沒有自然排名?

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 不允許您暫存這些流程。 如您所見,當fg實際上是動詞時,該模式確實有效。

我發現默認編程很優雅,但它在某些方面可能會更慢,而且在某些方面它是有限的。

我希望有人能提供更好的答案,以便我也可以學習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM