TL; DR
給定一個包含(有效)動詞的字符串,如何獲取該謂詞而不將其提交給任何變量?例如,說eval
是那個函數;它應該像這樣工作:在J中評估一個字符串作爲動詞
eval '+ @ >: @ %'
[email protected]>:@%
eval '+'
+
我只需要它能夠執行動詞和回報他們,但是這將是很酷的任意代碼eval'd。 (我不知道".
,順便說一句。)
作爲一個有趣的小實驗,我想:「嘿,也許我可以做一個動詞,將改變動詞的字符串轉換成動詞的一列火車!」我知道,我可以使用;:
爲「字IFY」串入J-動詞,就像這樣:
]str =: '+ >: %'
+ >: %
;: str
┌─┬──┬─┐
│+│>:│%│
└─┴──┴─┘
到目前爲止,一切都很好。
'@' ,.~ > ;: str
+ @
>:@
% @
扁平化這一收益率:
+ @>:@% @
最後,用}:
斬去後@
現在,我只是將primatively與'@'
使用,.
( 「拉威爾項目」) 「加盟」 他們產量+ @>:@%
,我想要的醜陋版本,+ @ >: @ %
。
現在,這一切都很好,除了一件事:它是一個字符串。差不多了!但不完全。我心想,「噢!".
對此很完美,它基本上是eval。」令我沮喪的是,文檔閱讀這樣(EMPH礦):
".y
執行判決y
。如果執行結果爲名詞,則".y
的結果是該名詞; 如果執行結果是動詞,副詞或連詞,或者如果沒有執行結果,".y
的結果是一個空向量。
恩,darnit。這是行不通的。我可以從字符串內限定動詞肯定破解它在一起:
]verb =: , }: , '@' ,.~ > ;: str
+ @>:@%
'ret =: ' , verb
ret =: + @>:@%
". 'ret =: ' , verb
ret
[email protected]>:@%
而這一切都很好,但相當笨拙,尤其是對J.這一擊可以稍微與此is
動詞軟化:
is =: "[email protected](,&'=:'@,@[,}:@,@('@',.~>@;:)@])
'G' is '+>:%'
G
[email protected]>:@%
G 5
1.2
但只適用於你願意將該功能提交給變量。
所以,我的問題是:我如何將一個持有動詞的通用字符串轉換爲可用動詞?