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

            Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

            Vilaño, A Laracha Índice Patrimonio | Lugares e parroquias | Véxase tamén | Menú de navegación43°14′52″N 8°36′03″O / 43.24775, -8.60070

            Cegueira Índice Epidemioloxía | Deficiencia visual | Tipos de cegueira | Principais causas de cegueira | Tratamento | Técnicas de adaptación e axudas | Vida dos cegos | Primeiros auxilios | Crenzas respecto das persoas cegas | Crenzas das persoas cegas | O neno deficiente visual | Aspectos psicolóxicos da cegueira | Notas | Véxase tamén | Menú de navegación54.054.154.436928256blindnessDicionario da Real Academia GalegaPortal das Palabras"International Standards: Visual Standards — Aspects and Ranges of Vision Loss with Emphasis on Population Surveys.""Visual impairment and blindness""Presentan un plan para previr a cegueira"o orixinalACCDV Associació Catalana de Cecs i Disminuïts Visuals - PMFTrachoma"Effect of gene therapy on visual function in Leber's congenital amaurosis"1844137110.1056/NEJMoa0802268Cans guía - os mellores amigos dos cegosArquivadoEscola de cans guía para cegos en Mortágua, PortugalArquivado"Tecnología para ciegos y deficientes visuales. Recopilación de recursos gratuitos en la Red""Colorino""‘COL.diesis’, escuchar los sonidos del color""COL.diesis: Transforming Colour into Melody and Implementing the Result in a Colour Sensor Device"o orixinal"Sistema de desarrollo de sinestesia color-sonido para invidentes utilizando un protocolo de audio""Enseñanza táctil - geometría y color. Juegos didácticos para niños ciegos y videntes""Sistema Constanz"L'ocupació laboral dels cecs a l'Estat espanyol està pràcticament equiparada a la de les persones amb visió, entrevista amb Pedro ZuritaONCE (Organización Nacional de Cegos de España)Prevención da cegueiraDescrición de deficiencias visuais (Disc@pnet)Braillín, un boneco atractivo para calquera neno, con ou sen discapacidade, que permite familiarizarse co sistema de escritura e lectura brailleAxudas Técnicas36838ID00897494007150-90057129528256DOID:1432HP:0000618D001766C10.597.751.941.162C97109C0155020