Это довольно сложные конструкции, и трудно дать четкие объяснения; они не так просты, как макросы Lisp (или, между прочим, отношения между Lisp QUOTE
и EVAL
). Тем не менее, на веб-сайте Вольфрама есть хорошее и продолжительное обсуждение в виде заметок из выступления Робби Виллегаса "Неоцененные выражения" в 1999 году.
Defer
опущено в этом выступлении, потому что оно новое с Mathematica 6.0. Это очень похоже на HoldForm
, за исключением того, что когда он выводится во внешнем интерфейсе (но не в чистом ядре), он удаляется, оставляя выражение, которое можно использовать в качестве ввода. Это очень полезно, если вы хотите программно создавать выражения, которые пользователь может редактировать и оценивать, скажем, в палитре.
The output of exec
does go to standard out unless you specify the output
attribute.
Если вы хотите выводить в System.out, просто не указывайте атрибут "output". Если вы хотите перенаправить в файл И распечатать его в System.out, вы можете использовать команду tee , которая перенаправит вывод в данный файл, а также выведет его на стандартный вывод ... Я делаю не знаю, поддерживает ли Windows "тройник" или аналог.
Может быть, вы хотите посмотреть на атрибуты error
, logError
и errorproperty
для exec тоже задача. Они касаются обработки стандартного потока ошибок из процесса exec'd. Там может быть полезная информация, которая по какой-то причине перестает работать, что может объяснить неполноту, которую вы видите.
Но если процесс exec'd решит закрыть stdout или stderr и отправить их в другое место - вы мало что можете сделать .