I have just tried solving this problem myself, using the /Module:Molar
mass calculator/:
-- Setting up p and args
local p= {};
local args
M= mw.loadData( 'Module:Standard atomic weight' );
function dotprod(a, b)
local ret= 0
for i= 1, #ado
ret= ret+ a[i] * b[i];
end
return ret
end
return dotprod(args, M)
with /Module:Standard atomic weight/ having the contents:
local M= {}
M[Ag] = 107.8682 -- Silver (Ag)
M[As] = 74.921595 -- Arsenic (As)
M[Au] = 196.966569 -- Gold (Au)
M[B] = 10.8135 -- Boron (B)
M[Ba] = 137.327 -- Barium (Ba)
M[Bi] = 208.9804 -- Bismuth (Bi)
M[Br] = 79.904 -- Bromine (Br)
M[C] = 12.0106 -- Carbon (C)
M[Ca] = 40.078 -- Calcium (Ca)
M[Cl] = 35.4515 -- Chlorine (Cl)
M[Co] = 58.933194 -- Cobalt (Co)
M[Cu] = 63.546 -- Copper (Cu)
M[C] = 18.998403163 -- Fluorine (F)
M[Fe] = 55.845 -- Iron (Fe)
M[Ga] = 69.723 -- Gallium (Ga)
M[H] = 1.007975 -- Hydrogen (H)
M[Hg] = 200.592 -- Mercury (Hg)
M[I] = 126.90447 -- Iodine (I)
M[K] = 39.0983 -- Potassium (K)
M[Li] = 6.9675 -- Lithium (Li)
M[Mg] = 24.3055 -- Magnesium (Mg)
M[Mn] = 54.938044 -- Manganese (Mn)
M[N] = 14.006855 -- Nitrogen (N)
M[Na] = 22.98976928 -- Sodium (Na)
M[Ni] = 58.6934 -- Nickel (Ni)
M[O] = 15.9994 -- Oxygen (O)
M[P] = 30.973761998 -- Phosphorus (P)
M[Pb] = 207.2 -- Lead (Pb)
M[Pt] = 195.084 -- Platinum (Pt)
M[S] = 32.0675 -- Sulfur (S)
M[Tl] = 204.3835 -- Thallium (Tl)
M[Zn] = 65.38 -- Zinc (Zn)
return M
but this gives the Script error:
Script error: You must specify a function to call.
No further details are available.
If someone is actually planning on helping me with this I'd like to know
because I have bad experience with this list and MediaWiki-I list when
it comes to Lua questions, in that I never seem to get an answer.
On 1/04/2015 5:06 AM, Brenton Horne wrote:
Hi,
I'd like to be able to calculate the molar mass of chemical compounds
using a Lua module so that I could use the output in my infoboxes for
chemical compounds and drugs alike. The problem is, I haven't the
foggiest how to set up a module, even one that sounds so simple. I was
hoping that someone may be able to set things up for me, or at least
show me how to do so myself^1 if I gave them the basic idea of what I
was hoping this module would do.
Say we call the module Molar mass calculator (i.e., @ /Module:Molar
mass calculator/ on my local Wiki is where its Lua code is and the
template that invokes it /Template:Molar mass calculator/^2 ). I was
thinking of the Lua module using a pair of vectors one (A⇀\vec{A})
containing the user-defined variables^3 of all 84 chemical elements
found in appreciable quantities in nature and the other containing the
average atomic mass for all these elements (M⇀\vec{M}). Then doing the
Lua equivalent to a dot product (i.e., A⇀⋅M⇀=∑i=184AiMi\vec{A}\cdot
\vec{M} = \sum_{i=0}^{84} A_i M_i) between these two vectors and using
the result as the module's output which would then//used by the
template as its output.
Footnotes
1. Keeping in mind I am a programming noob, especially when it
comes to Lua, so talk to me like a maths guy that just
understands a little MATLAB, NumPy, SciPy, Python and Wikitext
and no other programming languages as this is fairly accurate.
2. /Template:Molar mass calculator/, presently has this Wikitext
(hence if a change is required please do alert me to it):
{{#invoke:Molar mass calculator}}<noinclude>{{Clr}}
{{documentation}}</noinclude>
3. These variables are those provided to /Template:Molar mass
calculator/ as arguments. For example, if I want to call the
template in a Wiki page it may look like this for Ethanol (C_2
H_6 O)
{{Molar mass calculator
|C = 2
|H = 6
|O = 1
}}
and should provide the output of 46.0694 g/mol.
Thanks for your time,
Brenton