How to verbalise code in Mathematica? [closed]Extract DownValues used in function evaluationHow do I plot a variable against another variable in Mathematica?I cannot execute this codeGenerating multiple choice questions with a random list of operations and rational numbersIs Mathematica worth it for me?Mathematica Progression Path from Apprentice to GuruHow to visualise Mathematica code and how to become a better coderHighschool teachers based in Australia using Mathematica ?Mathematica problem- consecutive integerswhy my code doesn't work

Convert Numbers To Emoji Math

Is there precedent or are there procedures for a US president refusing to concede to an electoral defeat?

What's the 2-minute timer on mobile Deutsche Bahn tickets?

Reverse ColorFunction or ColorData

How can I finally understand the confusing modal verb "мочь"?

My large rocket is still flipping over

Python 3 - simple temperature program version 1.3

Gerrymandering Puzzle - Rig the Election

What does the coin flipping before dying mean?

How long did it take Captain Marvel to travel to Earth?

Problem with estimating a sequence with intuition

How is trade in services conducted under the WTO in the absence of the Doha conclusion?

Two denim hijabs

How long does it take a postcard to get from USA to Germany?

Was there a dinosaur-counter in the original Jurassic Park movie?

How important are good looking people in a novel/story?

What would happen if I combined this polymer and this metal (assuming I can)

Can a player choose to add detail and flavor to their character's spells and abilities?

Old story about a creature laying pyramid shaped eggs on Mars

Is there a reason why Turkey took the Balkan territories of the Ottoman Empire, instead of Greece or another of the Balkan states?

What does のそ mean on this picture?

What are the requirements for a river delta to form?

How to say something covers all the view up to the horizon line?

Why would a military not separate its forces into different branches?



How to verbalise code in Mathematica? [closed]


Extract DownValues used in function evaluationHow do I plot a variable against another variable in Mathematica?I cannot execute this codeGenerating multiple choice questions with a random list of operations and rational numbersIs Mathematica worth it for me?Mathematica Progression Path from Apprentice to GuruHow to visualise Mathematica code and how to become a better coderHighschool teachers based in Australia using Mathematica ?Mathematica problem- consecutive integerswhy my code doesn't work













10












$begingroup$


How do you read an expression like?



x + y /. x -> 2


Looking up /. and -> in Mathematica docs it says ReplaceAll and Rule. But you would not pronounce the expression above as



x plus y replace all x rule 2. 


Instead you would say something like



x plus y where x goes to two. 


The operators /. and -> are just two examples, there are a lot of others in Mathematica. Is there some resource that addresses pronunciations in Mathematica.










share|improve this question











$endgroup$



closed as primarily opinion-based by Michael E2, m_goldberg, bbgodfrey, AccidentalFourierTransform, MarcoB Apr 29 at 12:44


Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.

















  • $begingroup$
    @C.E Of course there must be several ways to pronounce an expression, depending on the context. I am not after one true way to pronounce, but more a list of examples how you could pronounce some not obvious expressions. Maybe no one thinks this is worthwhile and that's OK, but if anybody has discussed this I would like a link to it.
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:14










  • $begingroup$
    This is a topic in any programming language, as they have not been designed to become acoustic streams. Are you primarily interested in communicating vocally to other people, or are you interested in clarifying your inner monologue while working on code? Some of us are more visual-oriented and a symbol like -> never makes it beyond the visual stage, never becomes an acoustic event.
    $endgroup$
    – Roman
    Apr 27 at 9:16










  • $begingroup$
    @Roman I am primarily interested in communicating vocally to other people. When it comes to other programming languages there is some discussion, see for instance stackoverflow.com/questions/7746894/…
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:23










  • $begingroup$
    I know that pronunciations are opinion based and that there are no true answers, but still it makes sense to me that have some way of communication vocally to other people when the need arises, so the discussion in Haskell was of great help to me, even though it is opinion based.
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:31










  • $begingroup$
    How about you get a list started, like the Haskell example, and everybody chips in? Something like a table with three columns: "symbol", "pronounciations" (many lines), and "voters" where everybody can put in their name to vote for a particular pronounciation.
    $endgroup$
    – Roman
    Apr 27 at 10:13















10












$begingroup$


How do you read an expression like?



x + y /. x -> 2


Looking up /. and -> in Mathematica docs it says ReplaceAll and Rule. But you would not pronounce the expression above as



x plus y replace all x rule 2. 


Instead you would say something like



x plus y where x goes to two. 


The operators /. and -> are just two examples, there are a lot of others in Mathematica. Is there some resource that addresses pronunciations in Mathematica.










share|improve this question











$endgroup$



closed as primarily opinion-based by Michael E2, m_goldberg, bbgodfrey, AccidentalFourierTransform, MarcoB Apr 29 at 12:44


Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.

















  • $begingroup$
    @C.E Of course there must be several ways to pronounce an expression, depending on the context. I am not after one true way to pronounce, but more a list of examples how you could pronounce some not obvious expressions. Maybe no one thinks this is worthwhile and that's OK, but if anybody has discussed this I would like a link to it.
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:14










  • $begingroup$
    This is a topic in any programming language, as they have not been designed to become acoustic streams. Are you primarily interested in communicating vocally to other people, or are you interested in clarifying your inner monologue while working on code? Some of us are more visual-oriented and a symbol like -> never makes it beyond the visual stage, never becomes an acoustic event.
    $endgroup$
    – Roman
    Apr 27 at 9:16










  • $begingroup$
    @Roman I am primarily interested in communicating vocally to other people. When it comes to other programming languages there is some discussion, see for instance stackoverflow.com/questions/7746894/…
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:23










  • $begingroup$
    I know that pronunciations are opinion based and that there are no true answers, but still it makes sense to me that have some way of communication vocally to other people when the need arises, so the discussion in Haskell was of great help to me, even though it is opinion based.
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:31










  • $begingroup$
    How about you get a list started, like the Haskell example, and everybody chips in? Something like a table with three columns: "symbol", "pronounciations" (many lines), and "voters" where everybody can put in their name to vote for a particular pronounciation.
    $endgroup$
    – Roman
    Apr 27 at 10:13













10












10








10


6



$begingroup$


How do you read an expression like?



x + y /. x -> 2


Looking up /. and -> in Mathematica docs it says ReplaceAll and Rule. But you would not pronounce the expression above as



x plus y replace all x rule 2. 


Instead you would say something like



x plus y where x goes to two. 


The operators /. and -> are just two examples, there are a lot of others in Mathematica. Is there some resource that addresses pronunciations in Mathematica.










share|improve this question











$endgroup$




How do you read an expression like?



x + y /. x -> 2


Looking up /. and -> in Mathematica docs it says ReplaceAll and Rule. But you would not pronounce the expression above as



x plus y replace all x rule 2. 


Instead you would say something like



x plus y where x goes to two. 


The operators /. and -> are just two examples, there are a lot of others in Mathematica. Is there some resource that addresses pronunciations in Mathematica.







education






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Apr 27 at 9:14









Carl Lange

5,97911445




5,97911445










asked Apr 27 at 8:53









Bob UelandBob Ueland

395111




395111




closed as primarily opinion-based by Michael E2, m_goldberg, bbgodfrey, AccidentalFourierTransform, MarcoB Apr 29 at 12:44


Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.









closed as primarily opinion-based by Michael E2, m_goldberg, bbgodfrey, AccidentalFourierTransform, MarcoB Apr 29 at 12:44


Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.













  • $begingroup$
    @C.E Of course there must be several ways to pronounce an expression, depending on the context. I am not after one true way to pronounce, but more a list of examples how you could pronounce some not obvious expressions. Maybe no one thinks this is worthwhile and that's OK, but if anybody has discussed this I would like a link to it.
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:14










  • $begingroup$
    This is a topic in any programming language, as they have not been designed to become acoustic streams. Are you primarily interested in communicating vocally to other people, or are you interested in clarifying your inner monologue while working on code? Some of us are more visual-oriented and a symbol like -> never makes it beyond the visual stage, never becomes an acoustic event.
    $endgroup$
    – Roman
    Apr 27 at 9:16










  • $begingroup$
    @Roman I am primarily interested in communicating vocally to other people. When it comes to other programming languages there is some discussion, see for instance stackoverflow.com/questions/7746894/…
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:23










  • $begingroup$
    I know that pronunciations are opinion based and that there are no true answers, but still it makes sense to me that have some way of communication vocally to other people when the need arises, so the discussion in Haskell was of great help to me, even though it is opinion based.
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:31










  • $begingroup$
    How about you get a list started, like the Haskell example, and everybody chips in? Something like a table with three columns: "symbol", "pronounciations" (many lines), and "voters" where everybody can put in their name to vote for a particular pronounciation.
    $endgroup$
    – Roman
    Apr 27 at 10:13
















  • $begingroup$
    @C.E Of course there must be several ways to pronounce an expression, depending on the context. I am not after one true way to pronounce, but more a list of examples how you could pronounce some not obvious expressions. Maybe no one thinks this is worthwhile and that's OK, but if anybody has discussed this I would like a link to it.
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:14










  • $begingroup$
    This is a topic in any programming language, as they have not been designed to become acoustic streams. Are you primarily interested in communicating vocally to other people, or are you interested in clarifying your inner monologue while working on code? Some of us are more visual-oriented and a symbol like -> never makes it beyond the visual stage, never becomes an acoustic event.
    $endgroup$
    – Roman
    Apr 27 at 9:16










  • $begingroup$
    @Roman I am primarily interested in communicating vocally to other people. When it comes to other programming languages there is some discussion, see for instance stackoverflow.com/questions/7746894/…
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:23










  • $begingroup$
    I know that pronunciations are opinion based and that there are no true answers, but still it makes sense to me that have some way of communication vocally to other people when the need arises, so the discussion in Haskell was of great help to me, even though it is opinion based.
    $endgroup$
    – Bob Ueland
    Apr 27 at 9:31










  • $begingroup$
    How about you get a list started, like the Haskell example, and everybody chips in? Something like a table with three columns: "symbol", "pronounciations" (many lines), and "voters" where everybody can put in their name to vote for a particular pronounciation.
    $endgroup$
    – Roman
    Apr 27 at 10:13















$begingroup$
@C.E Of course there must be several ways to pronounce an expression, depending on the context. I am not after one true way to pronounce, but more a list of examples how you could pronounce some not obvious expressions. Maybe no one thinks this is worthwhile and that's OK, but if anybody has discussed this I would like a link to it.
$endgroup$
– Bob Ueland
Apr 27 at 9:14




$begingroup$
@C.E Of course there must be several ways to pronounce an expression, depending on the context. I am not after one true way to pronounce, but more a list of examples how you could pronounce some not obvious expressions. Maybe no one thinks this is worthwhile and that's OK, but if anybody has discussed this I would like a link to it.
$endgroup$
– Bob Ueland
Apr 27 at 9:14












$begingroup$
This is a topic in any programming language, as they have not been designed to become acoustic streams. Are you primarily interested in communicating vocally to other people, or are you interested in clarifying your inner monologue while working on code? Some of us are more visual-oriented and a symbol like -> never makes it beyond the visual stage, never becomes an acoustic event.
$endgroup$
– Roman
Apr 27 at 9:16




$begingroup$
This is a topic in any programming language, as they have not been designed to become acoustic streams. Are you primarily interested in communicating vocally to other people, or are you interested in clarifying your inner monologue while working on code? Some of us are more visual-oriented and a symbol like -> never makes it beyond the visual stage, never becomes an acoustic event.
$endgroup$
– Roman
Apr 27 at 9:16












$begingroup$
@Roman I am primarily interested in communicating vocally to other people. When it comes to other programming languages there is some discussion, see for instance stackoverflow.com/questions/7746894/…
$endgroup$
– Bob Ueland
Apr 27 at 9:23




$begingroup$
@Roman I am primarily interested in communicating vocally to other people. When it comes to other programming languages there is some discussion, see for instance stackoverflow.com/questions/7746894/…
$endgroup$
– Bob Ueland
Apr 27 at 9:23












$begingroup$
I know that pronunciations are opinion based and that there are no true answers, but still it makes sense to me that have some way of communication vocally to other people when the need arises, so the discussion in Haskell was of great help to me, even though it is opinion based.
$endgroup$
– Bob Ueland
Apr 27 at 9:31




$begingroup$
I know that pronunciations are opinion based and that there are no true answers, but still it makes sense to me that have some way of communication vocally to other people when the need arises, so the discussion in Haskell was of great help to me, even though it is opinion based.
$endgroup$
– Bob Ueland
Apr 27 at 9:31












$begingroup$
How about you get a list started, like the Haskell example, and everybody chips in? Something like a table with three columns: "symbol", "pronounciations" (many lines), and "voters" where everybody can put in their name to vote for a particular pronounciation.
$endgroup$
– Roman
Apr 27 at 10:13




$begingroup$
How about you get a list started, like the Haskell example, and everybody chips in? Something like a table with three columns: "symbol", "pronounciations" (many lines), and "voters" where everybody can put in their name to vote for a particular pronounciation.
$endgroup$
– Roman
Apr 27 at 10:13










2 Answers
2






active

oldest

votes


















19












$begingroup$

Starting a brain dump of ideas, listening to my inner monologue. Please feel free to edit and add suggestions. Here is a list of most operators.



| sym | example | pronunciation | votes, comments, rants
|––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––––––––
| :: | x::y | x says y |
| # | # | slot |
| ## | ## | all slots |
| & | x& | x end-of-function |
| % | % | previous output |
| : | x:_ | x-pattern |
| | | anything, call it x |
| /; | x_/;y | x-pattern that y |
| | | anything that y, call it x |
| ? | x_?yQ | x-pattern that is y |
| | | anything y, call it x |
| _ | x_ | x-pattern |
| | | anything, call it x |
| _ | x_y | x-pattern of type y |
| | | anything of type y, call it x |
| __ | x__ | x-patterns |
| | | any sequence, call it x |
| ___ | x___ | x-maybepatterns |
| | | any sequence, even empty, call it x |
| _. | x_. | x-defaultpattern |
| | | anything, call it x, with default |
| : | x_:y | x-pattern defaults to y |
| | | anything, call it x, with default y |
| .. | x.. | one or more x |
| ... | x... | zero or more x |
| | 1,2,3 | list of 1, 2, 3 |
| [[]] | x[[y]] | element y of x |
| ;; | x;;y;;z | from x to y in steps of z |
| == | x==y | x equal to y |
| != | x!=y | x not equal to y |
| === | x===y | x same as y |
| =!= | x=!=y | x not same as y |
| ++ | x++ | x and then increment it |
| ++ | ++x | x but increment it first |
| -- | x-- | x and then decrement it |
| -- | --x | x but decrement it first |
| [] | x[y] | x of y |
| | x[y,z] | x of y and z |
| @* | x@*y | x of y |
| // | x//y | x then do y |
| /* | x/*y | y of x |
| | x//y/*z | x then do y then do z |
| @ | x@y | x of y |
| ~ | x~f~y | f of x and y |
| /@ | x/@y | map x onto y |
| //@ | x//@y | mapall x onto y |
| | | map x onto all levels of y |
| @@ | x@@y | x-head on y |
| @@@ | x@@@y | map x-head onto y |
| -> | x->y | x becomes y |
| | | x goes to y |
| :> | x:>y | x will become y |
| | | x will go to y |
| /. | x/.y | x where y |
| //. | x//.y | x where repeatedly y |
| = | x=y | x is y |
| := | x:=y | x will be y |
| ^= | x[y]^=z | y remembers x[y] is z |
| ^:= | x[y]^:=z | y remembers x[y] will be z |
| /: | x/:y=z | x remembers y is z |
| /: | x/:y:=z | x remembers y will be z |
| . | x=. | x is cleared |
|––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––





share|improve this answer











$endgroup$












  • $begingroup$
    thank you for a nice beginning. I often pronounce x_ as "anything, call it x". I guess you could pronounce x__ as "any sequence, call it x". And maybe you could pronounce x___ as "any sequence including empty, call it x".
    $endgroup$
    – Bob Ueland
    Apr 27 at 16:52






  • 1




    $begingroup$
    As I spend a fair amount of time teaching Mathematica to students who have never done programming, having a list of terms to use for the language's typography - if only to be self-consistent - is very helpful.
    $endgroup$
    – bobthechemist
    Apr 27 at 17:25










  • $begingroup$
    @bobthechemist please feel free to add the way you would pronounce things to the list! I teach Mathematica too and would be keen to have a consistent list.
    $endgroup$
    – Roman
    Apr 27 at 18:34










  • $begingroup$
    Do you have _h in your table? It represents any expression having the h as its head. For instance f[x_Integer] :=... defines a function that takes any integer as a parameter. I would pronounce x_Integer as "any integer call it x".
    $endgroup$
    – Bob Ueland
    Apr 27 at 19:39










  • $begingroup$
    Yes @BobUeland I had extrapolated your earlier comment to include x_y as "anything of type y, call it x".
    $endgroup$
    – Roman
    Apr 27 at 21:37


















14












$begingroup$

You could try using SpokenString:



SpokenString[HoldForm[x + y /. x->2]]



"x plus y slash dot x goes to 2"




Addendum



If you don't mind messing with internal functions, it is possible to customize the output of SpokenString. For this purpose, it is convenient to make use of my ExtractDownValues function reproduced below:



SetAttributes[ExtractDownValues, HoldAll]

ExtractDownValues[sym_[args__]] := ExtractDownValues[sym,args]
ExtractDownValues[sym_,args__] := Cases[
DownValues[sym],_[h_,_] /; MatchQ[Unevaluated[sym[args]],h]
]


The internal function that does most of the heavy lifting is SpokenStringDump`SSText:



TracePrint[SpokenString[HoldForm[x + y /. x -> 2]], _SpokenStringDump`SSText]



SpokenStringDump`SSText[x+y/. x->2]



SpokenStringDump`SSText[x+y]



SpokenStringDump`SSText[x]



SpokenStringDump`SSText[y]



SpokenStringDump`SSText[2]



SpokenStringDump`SSText[x->2]



SpokenStringDump`SSText[x]



SpokenStringDump`SSText[2]



"x plus y slash dot x goes to 2"




Using ExtractDownValues we find:



ExtractDownValues @ SpokenStringDump`SSText[x + y /. x -> 2]



HoldPattern[
SpokenStringDump`SSText[SpokenStringDump`a_ /. SpokenStringDump`b_]] :>
SpokenStringDump`SpeakQuantity[SpokenStringDump`a, ReplaceAll, True] ~~
" slash dot " ~~
If[ListQ[Unevaluated[SpokenStringDump`b]],
SpokenStringDump`SpeakListContents[SpokenStringDump`b],
SpokenStringDump`SpeakQuantity[SpokenStringDump`b, ReplaceAll, True]],
HoldPattern[
SpokenStringDump`SSText[SpokenStringDump`f_[SpokenStringDump`a___]]] :>
Module[SpokenStringDump`ans =
SpokenStringDump`SSText0[SpokenStringDump`f[SpokenStringDump`a]],
If[Head[SpokenStringDump`ans] =!= SpokenStringDump`SSText0 && !
MemberQ[SpokenStringDump`ans, $Failed, 0, 1], SpokenStringDump`ans,
SpokenStringDump`SSTextFallThrough[
Unevaluated[SpokenStringDump`f[SpokenStringDump`a]]]]]




Notice the " slash dot " string. So, modifying this downvalue to:



SpokenStringDump`SSText[a_ /. b_] := SpokenStringDump`SpeakQuantity[a,ReplaceAll,True] ~~ 
" where " ~~
If[ListQ[Unevaluated[b]],
SpokenStringDump`SpeakListContents[b],
SpokenStringDump`SpeakQuantity[b,ReplaceAll,True]
]


will produce:



SpokenString[HoldForm[x + y /. x->2]]



"x plus y where x goes to 2"







share|improve this answer











$endgroup$



















    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    19












    $begingroup$

    Starting a brain dump of ideas, listening to my inner monologue. Please feel free to edit and add suggestions. Here is a list of most operators.



    | sym | example | pronunciation | votes, comments, rants
    |––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––––––––
    | :: | x::y | x says y |
    | # | # | slot |
    | ## | ## | all slots |
    | & | x& | x end-of-function |
    | % | % | previous output |
    | : | x:_ | x-pattern |
    | | | anything, call it x |
    | /; | x_/;y | x-pattern that y |
    | | | anything that y, call it x |
    | ? | x_?yQ | x-pattern that is y |
    | | | anything y, call it x |
    | _ | x_ | x-pattern |
    | | | anything, call it x |
    | _ | x_y | x-pattern of type y |
    | | | anything of type y, call it x |
    | __ | x__ | x-patterns |
    | | | any sequence, call it x |
    | ___ | x___ | x-maybepatterns |
    | | | any sequence, even empty, call it x |
    | _. | x_. | x-defaultpattern |
    | | | anything, call it x, with default |
    | : | x_:y | x-pattern defaults to y |
    | | | anything, call it x, with default y |
    | .. | x.. | one or more x |
    | ... | x... | zero or more x |
    | | 1,2,3 | list of 1, 2, 3 |
    | [[]] | x[[y]] | element y of x |
    | ;; | x;;y;;z | from x to y in steps of z |
    | == | x==y | x equal to y |
    | != | x!=y | x not equal to y |
    | === | x===y | x same as y |
    | =!= | x=!=y | x not same as y |
    | ++ | x++ | x and then increment it |
    | ++ | ++x | x but increment it first |
    | -- | x-- | x and then decrement it |
    | -- | --x | x but decrement it first |
    | [] | x[y] | x of y |
    | | x[y,z] | x of y and z |
    | @* | x@*y | x of y |
    | // | x//y | x then do y |
    | /* | x/*y | y of x |
    | | x//y/*z | x then do y then do z |
    | @ | x@y | x of y |
    | ~ | x~f~y | f of x and y |
    | /@ | x/@y | map x onto y |
    | //@ | x//@y | mapall x onto y |
    | | | map x onto all levels of y |
    | @@ | x@@y | x-head on y |
    | @@@ | x@@@y | map x-head onto y |
    | -> | x->y | x becomes y |
    | | | x goes to y |
    | :> | x:>y | x will become y |
    | | | x will go to y |
    | /. | x/.y | x where y |
    | //. | x//.y | x where repeatedly y |
    | = | x=y | x is y |
    | := | x:=y | x will be y |
    | ^= | x[y]^=z | y remembers x[y] is z |
    | ^:= | x[y]^:=z | y remembers x[y] will be z |
    | /: | x/:y=z | x remembers y is z |
    | /: | x/:y:=z | x remembers y will be z |
    | . | x=. | x is cleared |
    |––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––





    share|improve this answer











    $endgroup$












    • $begingroup$
      thank you for a nice beginning. I often pronounce x_ as "anything, call it x". I guess you could pronounce x__ as "any sequence, call it x". And maybe you could pronounce x___ as "any sequence including empty, call it x".
      $endgroup$
      – Bob Ueland
      Apr 27 at 16:52






    • 1




      $begingroup$
      As I spend a fair amount of time teaching Mathematica to students who have never done programming, having a list of terms to use for the language's typography - if only to be self-consistent - is very helpful.
      $endgroup$
      – bobthechemist
      Apr 27 at 17:25










    • $begingroup$
      @bobthechemist please feel free to add the way you would pronounce things to the list! I teach Mathematica too and would be keen to have a consistent list.
      $endgroup$
      – Roman
      Apr 27 at 18:34










    • $begingroup$
      Do you have _h in your table? It represents any expression having the h as its head. For instance f[x_Integer] :=... defines a function that takes any integer as a parameter. I would pronounce x_Integer as "any integer call it x".
      $endgroup$
      – Bob Ueland
      Apr 27 at 19:39










    • $begingroup$
      Yes @BobUeland I had extrapolated your earlier comment to include x_y as "anything of type y, call it x".
      $endgroup$
      – Roman
      Apr 27 at 21:37















    19












    $begingroup$

    Starting a brain dump of ideas, listening to my inner monologue. Please feel free to edit and add suggestions. Here is a list of most operators.



    | sym | example | pronunciation | votes, comments, rants
    |––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––––––––
    | :: | x::y | x says y |
    | # | # | slot |
    | ## | ## | all slots |
    | & | x& | x end-of-function |
    | % | % | previous output |
    | : | x:_ | x-pattern |
    | | | anything, call it x |
    | /; | x_/;y | x-pattern that y |
    | | | anything that y, call it x |
    | ? | x_?yQ | x-pattern that is y |
    | | | anything y, call it x |
    | _ | x_ | x-pattern |
    | | | anything, call it x |
    | _ | x_y | x-pattern of type y |
    | | | anything of type y, call it x |
    | __ | x__ | x-patterns |
    | | | any sequence, call it x |
    | ___ | x___ | x-maybepatterns |
    | | | any sequence, even empty, call it x |
    | _. | x_. | x-defaultpattern |
    | | | anything, call it x, with default |
    | : | x_:y | x-pattern defaults to y |
    | | | anything, call it x, with default y |
    | .. | x.. | one or more x |
    | ... | x... | zero or more x |
    | | 1,2,3 | list of 1, 2, 3 |
    | [[]] | x[[y]] | element y of x |
    | ;; | x;;y;;z | from x to y in steps of z |
    | == | x==y | x equal to y |
    | != | x!=y | x not equal to y |
    | === | x===y | x same as y |
    | =!= | x=!=y | x not same as y |
    | ++ | x++ | x and then increment it |
    | ++ | ++x | x but increment it first |
    | -- | x-- | x and then decrement it |
    | -- | --x | x but decrement it first |
    | [] | x[y] | x of y |
    | | x[y,z] | x of y and z |
    | @* | x@*y | x of y |
    | // | x//y | x then do y |
    | /* | x/*y | y of x |
    | | x//y/*z | x then do y then do z |
    | @ | x@y | x of y |
    | ~ | x~f~y | f of x and y |
    | /@ | x/@y | map x onto y |
    | //@ | x//@y | mapall x onto y |
    | | | map x onto all levels of y |
    | @@ | x@@y | x-head on y |
    | @@@ | x@@@y | map x-head onto y |
    | -> | x->y | x becomes y |
    | | | x goes to y |
    | :> | x:>y | x will become y |
    | | | x will go to y |
    | /. | x/.y | x where y |
    | //. | x//.y | x where repeatedly y |
    | = | x=y | x is y |
    | := | x:=y | x will be y |
    | ^= | x[y]^=z | y remembers x[y] is z |
    | ^:= | x[y]^:=z | y remembers x[y] will be z |
    | /: | x/:y=z | x remembers y is z |
    | /: | x/:y:=z | x remembers y will be z |
    | . | x=. | x is cleared |
    |––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––





    share|improve this answer











    $endgroup$












    • $begingroup$
      thank you for a nice beginning. I often pronounce x_ as "anything, call it x". I guess you could pronounce x__ as "any sequence, call it x". And maybe you could pronounce x___ as "any sequence including empty, call it x".
      $endgroup$
      – Bob Ueland
      Apr 27 at 16:52






    • 1




      $begingroup$
      As I spend a fair amount of time teaching Mathematica to students who have never done programming, having a list of terms to use for the language's typography - if only to be self-consistent - is very helpful.
      $endgroup$
      – bobthechemist
      Apr 27 at 17:25










    • $begingroup$
      @bobthechemist please feel free to add the way you would pronounce things to the list! I teach Mathematica too and would be keen to have a consistent list.
      $endgroup$
      – Roman
      Apr 27 at 18:34










    • $begingroup$
      Do you have _h in your table? It represents any expression having the h as its head. For instance f[x_Integer] :=... defines a function that takes any integer as a parameter. I would pronounce x_Integer as "any integer call it x".
      $endgroup$
      – Bob Ueland
      Apr 27 at 19:39










    • $begingroup$
      Yes @BobUeland I had extrapolated your earlier comment to include x_y as "anything of type y, call it x".
      $endgroup$
      – Roman
      Apr 27 at 21:37













    19












    19








    19





    $begingroup$

    Starting a brain dump of ideas, listening to my inner monologue. Please feel free to edit and add suggestions. Here is a list of most operators.



    | sym | example | pronunciation | votes, comments, rants
    |––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––––––––
    | :: | x::y | x says y |
    | # | # | slot |
    | ## | ## | all slots |
    | & | x& | x end-of-function |
    | % | % | previous output |
    | : | x:_ | x-pattern |
    | | | anything, call it x |
    | /; | x_/;y | x-pattern that y |
    | | | anything that y, call it x |
    | ? | x_?yQ | x-pattern that is y |
    | | | anything y, call it x |
    | _ | x_ | x-pattern |
    | | | anything, call it x |
    | _ | x_y | x-pattern of type y |
    | | | anything of type y, call it x |
    | __ | x__ | x-patterns |
    | | | any sequence, call it x |
    | ___ | x___ | x-maybepatterns |
    | | | any sequence, even empty, call it x |
    | _. | x_. | x-defaultpattern |
    | | | anything, call it x, with default |
    | : | x_:y | x-pattern defaults to y |
    | | | anything, call it x, with default y |
    | .. | x.. | one or more x |
    | ... | x... | zero or more x |
    | | 1,2,3 | list of 1, 2, 3 |
    | [[]] | x[[y]] | element y of x |
    | ;; | x;;y;;z | from x to y in steps of z |
    | == | x==y | x equal to y |
    | != | x!=y | x not equal to y |
    | === | x===y | x same as y |
    | =!= | x=!=y | x not same as y |
    | ++ | x++ | x and then increment it |
    | ++ | ++x | x but increment it first |
    | -- | x-- | x and then decrement it |
    | -- | --x | x but decrement it first |
    | [] | x[y] | x of y |
    | | x[y,z] | x of y and z |
    | @* | x@*y | x of y |
    | // | x//y | x then do y |
    | /* | x/*y | y of x |
    | | x//y/*z | x then do y then do z |
    | @ | x@y | x of y |
    | ~ | x~f~y | f of x and y |
    | /@ | x/@y | map x onto y |
    | //@ | x//@y | mapall x onto y |
    | | | map x onto all levels of y |
    | @@ | x@@y | x-head on y |
    | @@@ | x@@@y | map x-head onto y |
    | -> | x->y | x becomes y |
    | | | x goes to y |
    | :> | x:>y | x will become y |
    | | | x will go to y |
    | /. | x/.y | x where y |
    | //. | x//.y | x where repeatedly y |
    | = | x=y | x is y |
    | := | x:=y | x will be y |
    | ^= | x[y]^=z | y remembers x[y] is z |
    | ^:= | x[y]^:=z | y remembers x[y] will be z |
    | /: | x/:y=z | x remembers y is z |
    | /: | x/:y:=z | x remembers y will be z |
    | . | x=. | x is cleared |
    |––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––





    share|improve this answer











    $endgroup$



    Starting a brain dump of ideas, listening to my inner monologue. Please feel free to edit and add suggestions. Here is a list of most operators.



    | sym | example | pronunciation | votes, comments, rants
    |––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––––––––
    | :: | x::y | x says y |
    | # | # | slot |
    | ## | ## | all slots |
    | & | x& | x end-of-function |
    | % | % | previous output |
    | : | x:_ | x-pattern |
    | | | anything, call it x |
    | /; | x_/;y | x-pattern that y |
    | | | anything that y, call it x |
    | ? | x_?yQ | x-pattern that is y |
    | | | anything y, call it x |
    | _ | x_ | x-pattern |
    | | | anything, call it x |
    | _ | x_y | x-pattern of type y |
    | | | anything of type y, call it x |
    | __ | x__ | x-patterns |
    | | | any sequence, call it x |
    | ___ | x___ | x-maybepatterns |
    | | | any sequence, even empty, call it x |
    | _. | x_. | x-defaultpattern |
    | | | anything, call it x, with default |
    | : | x_:y | x-pattern defaults to y |
    | | | anything, call it x, with default y |
    | .. | x.. | one or more x |
    | ... | x... | zero or more x |
    | | 1,2,3 | list of 1, 2, 3 |
    | [[]] | x[[y]] | element y of x |
    | ;; | x;;y;;z | from x to y in steps of z |
    | == | x==y | x equal to y |
    | != | x!=y | x not equal to y |
    | === | x===y | x same as y |
    | =!= | x=!=y | x not same as y |
    | ++ | x++ | x and then increment it |
    | ++ | ++x | x but increment it first |
    | -- | x-- | x and then decrement it |
    | -- | --x | x but decrement it first |
    | [] | x[y] | x of y |
    | | x[y,z] | x of y and z |
    | @* | x@*y | x of y |
    | // | x//y | x then do y |
    | /* | x/*y | y of x |
    | | x//y/*z | x then do y then do z |
    | @ | x@y | x of y |
    | ~ | x~f~y | f of x and y |
    | /@ | x/@y | map x onto y |
    | //@ | x//@y | mapall x onto y |
    | | | map x onto all levels of y |
    | @@ | x@@y | x-head on y |
    | @@@ | x@@@y | map x-head onto y |
    | -> | x->y | x becomes y |
    | | | x goes to y |
    | :> | x:>y | x will become y |
    | | | x will go to y |
    | /. | x/.y | x where y |
    | //. | x//.y | x where repeatedly y |
    | = | x=y | x is y |
    | := | x:=y | x will be y |
    | ^= | x[y]^=z | y remembers x[y] is z |
    | ^:= | x[y]^:=z | y remembers x[y] will be z |
    | /: | x/:y=z | x remembers y is z |
    | /: | x/:y:=z | x remembers y will be z |
    | . | x=. | x is cleared |
    |––––––|–––––––––––––|–––––––––––––––––––––––––––––––––––––|–––––––––––––––––––






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Apr 27 at 21:51

























    answered Apr 27 at 15:57









    RomanRoman

    7,31011235




    7,31011235











    • $begingroup$
      thank you for a nice beginning. I often pronounce x_ as "anything, call it x". I guess you could pronounce x__ as "any sequence, call it x". And maybe you could pronounce x___ as "any sequence including empty, call it x".
      $endgroup$
      – Bob Ueland
      Apr 27 at 16:52






    • 1




      $begingroup$
      As I spend a fair amount of time teaching Mathematica to students who have never done programming, having a list of terms to use for the language's typography - if only to be self-consistent - is very helpful.
      $endgroup$
      – bobthechemist
      Apr 27 at 17:25










    • $begingroup$
      @bobthechemist please feel free to add the way you would pronounce things to the list! I teach Mathematica too and would be keen to have a consistent list.
      $endgroup$
      – Roman
      Apr 27 at 18:34










    • $begingroup$
      Do you have _h in your table? It represents any expression having the h as its head. For instance f[x_Integer] :=... defines a function that takes any integer as a parameter. I would pronounce x_Integer as "any integer call it x".
      $endgroup$
      – Bob Ueland
      Apr 27 at 19:39










    • $begingroup$
      Yes @BobUeland I had extrapolated your earlier comment to include x_y as "anything of type y, call it x".
      $endgroup$
      – Roman
      Apr 27 at 21:37
















    • $begingroup$
      thank you for a nice beginning. I often pronounce x_ as "anything, call it x". I guess you could pronounce x__ as "any sequence, call it x". And maybe you could pronounce x___ as "any sequence including empty, call it x".
      $endgroup$
      – Bob Ueland
      Apr 27 at 16:52






    • 1




      $begingroup$
      As I spend a fair amount of time teaching Mathematica to students who have never done programming, having a list of terms to use for the language's typography - if only to be self-consistent - is very helpful.
      $endgroup$
      – bobthechemist
      Apr 27 at 17:25










    • $begingroup$
      @bobthechemist please feel free to add the way you would pronounce things to the list! I teach Mathematica too and would be keen to have a consistent list.
      $endgroup$
      – Roman
      Apr 27 at 18:34










    • $begingroup$
      Do you have _h in your table? It represents any expression having the h as its head. For instance f[x_Integer] :=... defines a function that takes any integer as a parameter. I would pronounce x_Integer as "any integer call it x".
      $endgroup$
      – Bob Ueland
      Apr 27 at 19:39










    • $begingroup$
      Yes @BobUeland I had extrapolated your earlier comment to include x_y as "anything of type y, call it x".
      $endgroup$
      – Roman
      Apr 27 at 21:37















    $begingroup$
    thank you for a nice beginning. I often pronounce x_ as "anything, call it x". I guess you could pronounce x__ as "any sequence, call it x". And maybe you could pronounce x___ as "any sequence including empty, call it x".
    $endgroup$
    – Bob Ueland
    Apr 27 at 16:52




    $begingroup$
    thank you for a nice beginning. I often pronounce x_ as "anything, call it x". I guess you could pronounce x__ as "any sequence, call it x". And maybe you could pronounce x___ as "any sequence including empty, call it x".
    $endgroup$
    – Bob Ueland
    Apr 27 at 16:52




    1




    1




    $begingroup$
    As I spend a fair amount of time teaching Mathematica to students who have never done programming, having a list of terms to use for the language's typography - if only to be self-consistent - is very helpful.
    $endgroup$
    – bobthechemist
    Apr 27 at 17:25




    $begingroup$
    As I spend a fair amount of time teaching Mathematica to students who have never done programming, having a list of terms to use for the language's typography - if only to be self-consistent - is very helpful.
    $endgroup$
    – bobthechemist
    Apr 27 at 17:25












    $begingroup$
    @bobthechemist please feel free to add the way you would pronounce things to the list! I teach Mathematica too and would be keen to have a consistent list.
    $endgroup$
    – Roman
    Apr 27 at 18:34




    $begingroup$
    @bobthechemist please feel free to add the way you would pronounce things to the list! I teach Mathematica too and would be keen to have a consistent list.
    $endgroup$
    – Roman
    Apr 27 at 18:34












    $begingroup$
    Do you have _h in your table? It represents any expression having the h as its head. For instance f[x_Integer] :=... defines a function that takes any integer as a parameter. I would pronounce x_Integer as "any integer call it x".
    $endgroup$
    – Bob Ueland
    Apr 27 at 19:39




    $begingroup$
    Do you have _h in your table? It represents any expression having the h as its head. For instance f[x_Integer] :=... defines a function that takes any integer as a parameter. I would pronounce x_Integer as "any integer call it x".
    $endgroup$
    – Bob Ueland
    Apr 27 at 19:39












    $begingroup$
    Yes @BobUeland I had extrapolated your earlier comment to include x_y as "anything of type y, call it x".
    $endgroup$
    – Roman
    Apr 27 at 21:37




    $begingroup$
    Yes @BobUeland I had extrapolated your earlier comment to include x_y as "anything of type y, call it x".
    $endgroup$
    – Roman
    Apr 27 at 21:37











    14












    $begingroup$

    You could try using SpokenString:



    SpokenString[HoldForm[x + y /. x->2]]



    "x plus y slash dot x goes to 2"




    Addendum



    If you don't mind messing with internal functions, it is possible to customize the output of SpokenString. For this purpose, it is convenient to make use of my ExtractDownValues function reproduced below:



    SetAttributes[ExtractDownValues, HoldAll]

    ExtractDownValues[sym_[args__]] := ExtractDownValues[sym,args]
    ExtractDownValues[sym_,args__] := Cases[
    DownValues[sym],_[h_,_] /; MatchQ[Unevaluated[sym[args]],h]
    ]


    The internal function that does most of the heavy lifting is SpokenStringDump`SSText:



    TracePrint[SpokenString[HoldForm[x + y /. x -> 2]], _SpokenStringDump`SSText]



    SpokenStringDump`SSText[x+y/. x->2]



    SpokenStringDump`SSText[x+y]



    SpokenStringDump`SSText[x]



    SpokenStringDump`SSText[y]



    SpokenStringDump`SSText[2]



    SpokenStringDump`SSText[x->2]



    SpokenStringDump`SSText[x]



    SpokenStringDump`SSText[2]



    "x plus y slash dot x goes to 2"




    Using ExtractDownValues we find:



    ExtractDownValues @ SpokenStringDump`SSText[x + y /. x -> 2]



    HoldPattern[
    SpokenStringDump`SSText[SpokenStringDump`a_ /. SpokenStringDump`b_]] :>
    SpokenStringDump`SpeakQuantity[SpokenStringDump`a, ReplaceAll, True] ~~
    " slash dot " ~~
    If[ListQ[Unevaluated[SpokenStringDump`b]],
    SpokenStringDump`SpeakListContents[SpokenStringDump`b],
    SpokenStringDump`SpeakQuantity[SpokenStringDump`b, ReplaceAll, True]],
    HoldPattern[
    SpokenStringDump`SSText[SpokenStringDump`f_[SpokenStringDump`a___]]] :>
    Module[SpokenStringDump`ans =
    SpokenStringDump`SSText0[SpokenStringDump`f[SpokenStringDump`a]],
    If[Head[SpokenStringDump`ans] =!= SpokenStringDump`SSText0 && !
    MemberQ[SpokenStringDump`ans, $Failed, 0, 1], SpokenStringDump`ans,
    SpokenStringDump`SSTextFallThrough[
    Unevaluated[SpokenStringDump`f[SpokenStringDump`a]]]]]




    Notice the " slash dot " string. So, modifying this downvalue to:



    SpokenStringDump`SSText[a_ /. b_] := SpokenStringDump`SpeakQuantity[a,ReplaceAll,True] ~~ 
    " where " ~~
    If[ListQ[Unevaluated[b]],
    SpokenStringDump`SpeakListContents[b],
    SpokenStringDump`SpeakQuantity[b,ReplaceAll,True]
    ]


    will produce:



    SpokenString[HoldForm[x + y /. x->2]]



    "x plus y where x goes to 2"







    share|improve this answer











    $endgroup$

















      14












      $begingroup$

      You could try using SpokenString:



      SpokenString[HoldForm[x + y /. x->2]]



      "x plus y slash dot x goes to 2"




      Addendum



      If you don't mind messing with internal functions, it is possible to customize the output of SpokenString. For this purpose, it is convenient to make use of my ExtractDownValues function reproduced below:



      SetAttributes[ExtractDownValues, HoldAll]

      ExtractDownValues[sym_[args__]] := ExtractDownValues[sym,args]
      ExtractDownValues[sym_,args__] := Cases[
      DownValues[sym],_[h_,_] /; MatchQ[Unevaluated[sym[args]],h]
      ]


      The internal function that does most of the heavy lifting is SpokenStringDump`SSText:



      TracePrint[SpokenString[HoldForm[x + y /. x -> 2]], _SpokenStringDump`SSText]



      SpokenStringDump`SSText[x+y/. x->2]



      SpokenStringDump`SSText[x+y]



      SpokenStringDump`SSText[x]



      SpokenStringDump`SSText[y]



      SpokenStringDump`SSText[2]



      SpokenStringDump`SSText[x->2]



      SpokenStringDump`SSText[x]



      SpokenStringDump`SSText[2]



      "x plus y slash dot x goes to 2"




      Using ExtractDownValues we find:



      ExtractDownValues @ SpokenStringDump`SSText[x + y /. x -> 2]



      HoldPattern[
      SpokenStringDump`SSText[SpokenStringDump`a_ /. SpokenStringDump`b_]] :>
      SpokenStringDump`SpeakQuantity[SpokenStringDump`a, ReplaceAll, True] ~~
      " slash dot " ~~
      If[ListQ[Unevaluated[SpokenStringDump`b]],
      SpokenStringDump`SpeakListContents[SpokenStringDump`b],
      SpokenStringDump`SpeakQuantity[SpokenStringDump`b, ReplaceAll, True]],
      HoldPattern[
      SpokenStringDump`SSText[SpokenStringDump`f_[SpokenStringDump`a___]]] :>
      Module[SpokenStringDump`ans =
      SpokenStringDump`SSText0[SpokenStringDump`f[SpokenStringDump`a]],
      If[Head[SpokenStringDump`ans] =!= SpokenStringDump`SSText0 && !
      MemberQ[SpokenStringDump`ans, $Failed, 0, 1], SpokenStringDump`ans,
      SpokenStringDump`SSTextFallThrough[
      Unevaluated[SpokenStringDump`f[SpokenStringDump`a]]]]]




      Notice the " slash dot " string. So, modifying this downvalue to:



      SpokenStringDump`SSText[a_ /. b_] := SpokenStringDump`SpeakQuantity[a,ReplaceAll,True] ~~ 
      " where " ~~
      If[ListQ[Unevaluated[b]],
      SpokenStringDump`SpeakListContents[b],
      SpokenStringDump`SpeakQuantity[b,ReplaceAll,True]
      ]


      will produce:



      SpokenString[HoldForm[x + y /. x->2]]



      "x plus y where x goes to 2"







      share|improve this answer











      $endgroup$















        14












        14








        14





        $begingroup$

        You could try using SpokenString:



        SpokenString[HoldForm[x + y /. x->2]]



        "x plus y slash dot x goes to 2"




        Addendum



        If you don't mind messing with internal functions, it is possible to customize the output of SpokenString. For this purpose, it is convenient to make use of my ExtractDownValues function reproduced below:



        SetAttributes[ExtractDownValues, HoldAll]

        ExtractDownValues[sym_[args__]] := ExtractDownValues[sym,args]
        ExtractDownValues[sym_,args__] := Cases[
        DownValues[sym],_[h_,_] /; MatchQ[Unevaluated[sym[args]],h]
        ]


        The internal function that does most of the heavy lifting is SpokenStringDump`SSText:



        TracePrint[SpokenString[HoldForm[x + y /. x -> 2]], _SpokenStringDump`SSText]



        SpokenStringDump`SSText[x+y/. x->2]



        SpokenStringDump`SSText[x+y]



        SpokenStringDump`SSText[x]



        SpokenStringDump`SSText[y]



        SpokenStringDump`SSText[2]



        SpokenStringDump`SSText[x->2]



        SpokenStringDump`SSText[x]



        SpokenStringDump`SSText[2]



        "x plus y slash dot x goes to 2"




        Using ExtractDownValues we find:



        ExtractDownValues @ SpokenStringDump`SSText[x + y /. x -> 2]



        HoldPattern[
        SpokenStringDump`SSText[SpokenStringDump`a_ /. SpokenStringDump`b_]] :>
        SpokenStringDump`SpeakQuantity[SpokenStringDump`a, ReplaceAll, True] ~~
        " slash dot " ~~
        If[ListQ[Unevaluated[SpokenStringDump`b]],
        SpokenStringDump`SpeakListContents[SpokenStringDump`b],
        SpokenStringDump`SpeakQuantity[SpokenStringDump`b, ReplaceAll, True]],
        HoldPattern[
        SpokenStringDump`SSText[SpokenStringDump`f_[SpokenStringDump`a___]]] :>
        Module[SpokenStringDump`ans =
        SpokenStringDump`SSText0[SpokenStringDump`f[SpokenStringDump`a]],
        If[Head[SpokenStringDump`ans] =!= SpokenStringDump`SSText0 && !
        MemberQ[SpokenStringDump`ans, $Failed, 0, 1], SpokenStringDump`ans,
        SpokenStringDump`SSTextFallThrough[
        Unevaluated[SpokenStringDump`f[SpokenStringDump`a]]]]]




        Notice the " slash dot " string. So, modifying this downvalue to:



        SpokenStringDump`SSText[a_ /. b_] := SpokenStringDump`SpeakQuantity[a,ReplaceAll,True] ~~ 
        " where " ~~
        If[ListQ[Unevaluated[b]],
        SpokenStringDump`SpeakListContents[b],
        SpokenStringDump`SpeakQuantity[b,ReplaceAll,True]
        ]


        will produce:



        SpokenString[HoldForm[x + y /. x->2]]



        "x plus y where x goes to 2"







        share|improve this answer











        $endgroup$



        You could try using SpokenString:



        SpokenString[HoldForm[x + y /. x->2]]



        "x plus y slash dot x goes to 2"




        Addendum



        If you don't mind messing with internal functions, it is possible to customize the output of SpokenString. For this purpose, it is convenient to make use of my ExtractDownValues function reproduced below:



        SetAttributes[ExtractDownValues, HoldAll]

        ExtractDownValues[sym_[args__]] := ExtractDownValues[sym,args]
        ExtractDownValues[sym_,args__] := Cases[
        DownValues[sym],_[h_,_] /; MatchQ[Unevaluated[sym[args]],h]
        ]


        The internal function that does most of the heavy lifting is SpokenStringDump`SSText:



        TracePrint[SpokenString[HoldForm[x + y /. x -> 2]], _SpokenStringDump`SSText]



        SpokenStringDump`SSText[x+y/. x->2]



        SpokenStringDump`SSText[x+y]



        SpokenStringDump`SSText[x]



        SpokenStringDump`SSText[y]



        SpokenStringDump`SSText[2]



        SpokenStringDump`SSText[x->2]



        SpokenStringDump`SSText[x]



        SpokenStringDump`SSText[2]



        "x plus y slash dot x goes to 2"




        Using ExtractDownValues we find:



        ExtractDownValues @ SpokenStringDump`SSText[x + y /. x -> 2]



        HoldPattern[
        SpokenStringDump`SSText[SpokenStringDump`a_ /. SpokenStringDump`b_]] :>
        SpokenStringDump`SpeakQuantity[SpokenStringDump`a, ReplaceAll, True] ~~
        " slash dot " ~~
        If[ListQ[Unevaluated[SpokenStringDump`b]],
        SpokenStringDump`SpeakListContents[SpokenStringDump`b],
        SpokenStringDump`SpeakQuantity[SpokenStringDump`b, ReplaceAll, True]],
        HoldPattern[
        SpokenStringDump`SSText[SpokenStringDump`f_[SpokenStringDump`a___]]] :>
        Module[SpokenStringDump`ans =
        SpokenStringDump`SSText0[SpokenStringDump`f[SpokenStringDump`a]],
        If[Head[SpokenStringDump`ans] =!= SpokenStringDump`SSText0 && !
        MemberQ[SpokenStringDump`ans, $Failed, 0, 1], SpokenStringDump`ans,
        SpokenStringDump`SSTextFallThrough[
        Unevaluated[SpokenStringDump`f[SpokenStringDump`a]]]]]




        Notice the " slash dot " string. So, modifying this downvalue to:



        SpokenStringDump`SSText[a_ /. b_] := SpokenStringDump`SpeakQuantity[a,ReplaceAll,True] ~~ 
        " where " ~~
        If[ListQ[Unevaluated[b]],
        SpokenStringDump`SpeakListContents[b],
        SpokenStringDump`SpeakQuantity[b,ReplaceAll,True]
        ]


        will produce:



        SpokenString[HoldForm[x + y /. x->2]]



        "x plus y where x goes to 2"








        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Apr 27 at 19:18

























        answered Apr 27 at 13:51









        Carl WollCarl Woll

        77.1k3101202




        77.1k3101202













            Popular posts from this blog

            Wikipedia:Vital articles Мазмуну Biography - Өмүр баян Philosophy and psychology - Философия жана психология Religion - Дин Social sciences - Коомдук илимдер Language and literature - Тил жана адабият Science - Илим Technology - Технология Arts and recreation - Искусство жана эс алуу History and geography - Тарых жана география Навигация менюсу

            Bruxelas-Capital Índice Historia | Composición | Situación lingüística | Clima | Cidades irmandadas | Notas | Véxase tamén | Menú de navegacióneO uso das linguas en Bruxelas e a situación do neerlandés"Rexión de Bruxelas Capital"o orixinalSitio da rexiónPáxina de Bruselas no sitio da Oficina de Promoción Turística de Valonia e BruxelasMapa Interactivo da Rexión de Bruxelas-CapitaleeWorldCat332144929079854441105155190212ID28008674080552-90000 0001 0666 3698n94104302ID540940339365017018237

            What should I write in an apology letter, since I have decided not to join a company after accepting an offer letterShould I keep looking after accepting a job offer?What should I do when I've been verbally told I would get an offer letter, but still haven't gotten one after 4 weeks?Do I accept an offer from a company that I am not likely to join?New job hasn't confirmed starting date and I want to give current employer as much notice as possibleHow should I address my manager in my resignation letter?HR delayed background verification, now jobless as resignedNo email communication after accepting a formal written offer. How should I phrase the call?What should I do if after receiving a verbal offer letter I am informed that my written job offer is put on hold due to some internal issues?Should I inform the current employer that I am about to resign within 1-2 weeks since I have signed the offer letter and waiting for visa?What company will do, if I send their offer letter to another company