TL; DR
Data una stringa contenente un verbo (valido), come faccio a ottenere quel verbo senza commettere a tutte le variabili? Ad esempio, supponiamo che eval
sia quella funzione; dovrebbe funzionare in questo modo:valutare una stringa come un verbo in J
eval '+ @ >: @ %'
[email protected]>:@%
eval '+'
+
Ho solo bisogno di essere in grado di eseguire i verbi e restituirli, ma sarebbe bello avere un codice arbitrario essere eval'd. (Io non so ".
, BTW.)
Come un piccolo esperimento divertente, ho pensato "ehi, forse posso fare un verbo che trasformerà una serie di verbi in un treno di verbi!" So che posso usare ;:
per "parola-Ify" la stringa in J-verbi, in questo modo:
]str =: '+ >: %'
+ >: %
;: str
┌─┬──┬─┐
│+│>:│%│
└─┴──┴─┘
Fin qui, tutto bene. Ora, ho appena ti primatively "join" loro con '@'
utilizzando ,.
("articoli Ravel"):
'@' ,.~ > ;: str
+ @
>:@
% @
Flattening questa rendimenti:
+ @>:@% @
E, infine, tagliando fuori la finale @
con }:
produce + @>:@%
, una versione più brutta di quello che voglio, + @ >: @ %
.
Ora, questo è tutto a posto, eccetto per una cosa: è una stringa. Quasi lì! Ma non del tutto. Ho pensato a me stesso, "Oh! ".
sarebbe perfetto per questo, è fondamentalmente eval." Per il mio sgomento, la documentazione leggere in tal modo (emph mio):
".y
esegue la sentenzay
. Se l'esecuzione risulta in un nome, il risultato di".y
è quel nome; se il risultato dell'esecuzione è un verbo, avverbio o congiunzione o se non vi è alcun risultato di esecuzione, il risultato di".y
è un vettore vuoto.
Beh, maledizione. Quello non funzionerà. Posso certamente incidere insieme definendo un verbo dal all'interno della stringa:
]verb =: , }: , '@' ,.~ > ;: str
+ @>:@%
'ret =: ' , verb
ret =: + @>:@%
". 'ret =: ' , verb
ret
[email protected]>:@%
e questo è cosa buona e giusta, ma piuttosto goffo, soprattutto per J. Il colpo può essere ammorbidito un po 'con questo is
verbo:
is =: "[email protected](,&'=:'@,@[,}:@,@('@',.~>@;:)@])
'G' is '+>:%'
G
[email protected]>:@%
G 5
1.2
Ma funziona solo se si è disposti a commettere la funzione su una variabile.
Quindi, la mia domanda è la seguente: come convertire una stringa generica contenente un verbo in un verbo utilizzabile?