TL; DR
eine Zeichenfolge ein (gültig) Verb enthält, Bedenkt man, wie ich das Verb erhalten, ohne es zu irgendwelchen Variablen zu begehen? Zum Beispiel, sagen wir eval
ist diese Funktion; es sollte wie folgt funktionieren:auswerten eine Zeichenfolge als Verb in J
eval '+ @ >: @ %'
[email protected]>:@%
eval '+'
+
Ich brauche es nur in der Lage sein, Verben auszuführen und bringt sie, aber es wäre cool, beliebiger Code hat eval'd werden. (Ich weiß über ".
, BTW.)
Als lustiges kleines Experiment, dachte ich: „Hey, vielleicht kann ich ein Verb machen, die eine Reihe von Verben in eine Folge von Verben verwandeln!“ Ich weiß, dass ich ;:
verwenden kann, um "Wort-ify" die Zeichenfolge in J-Verben, etwa so:
]str =: '+ >: %'
+ >: %
;: str
┌─┬──┬─┐
│+│>:│%│
└─┴──┴─┘
So weit, so gut. Nun, ich will nur primatively "join" sie mit '@'
von ,.
mit ("Ravel Artikel"):
'@' ,.~ > ;: str
+ @
>:@
% @
Abflachen Dies ergibt:
+ @>:@% @
Und schließlich die hintere @
mit }:
Abhacken Erträge + @>:@%
, eine hässlichere Version von dem, was ich will, + @ >: @ %
.
Nun, das ist alles gut und gut, bis auf eine Sache: Es ist eine Zeichenfolge. Fast dort! Aber nicht ganz. Ich dachte mir: "Oh! ".
wäre perfekt dafür, es ist im Grunde Eval." Zu meiner Bestürzung, lesen Sie die Dokumentation so (emph von mir):
".y
führt den Satzy
. Wenn die Ausführung ein Substantiv ergibt, ist das Ergebnis von".y
das Substantiv; Wenn das Ausführungsergebnis ein Verb, ein Adverb oder eine Konjunktion ist, oder wenn es kein Ausführungsergebnis gibt, ist das Ergebnis".y
ein leerer Vektor.
Nun, darnit. Das wird nicht funktionieren. Ich kann es auf jeden Fall hacken zusammen durch ein Verb aus der Zeichenfolge zu definieren:
]verb =: , }: , '@' ,.~ > ;: str
+ @>:@%
'ret =: ' , verb
ret =: + @>:@%
". 'ret =: ' , verb
ret
[email protected]>:@%
Und das ist alles schön und gut, aber eher unbeholfen, vor allem für J. kann der Schlag leicht mit diesem is
Verb weich gemacht werden:
is =: "[email protected](,&'=:'@,@[,}:@,@('@',.~>@;:)@])
'G' is '+>:%'
G
[email protected]>:@%
G 5
1.2
Aber funktioniert nur, wenn Sie bereit sind, die Funktion an eine Variable zu übergeben.
Meine Frage lautet also: Wie konvertiere ich eine generische Zeichenfolge, die ein Verb enthält, in ein verwendbares Verb?