SenseTalkにおける算術計算
SenseTalkの算術コマンドおよび関数もまた、数値を扱う上で便利なツールです。
- 算術コマンド:コンテナに格納された数値を変更するための算術コマンドを4つご紹介します。これらのコマンドが果たす算術機能は、+、-、*、/ 演算子と同じです。異なるのは、算術コマンドがオペランドの1つをコンテナから取り、計算結果を再びそのコンテナに格納する点です。
- 算術関数:本セクションでは、数値演算を行う算術関数について説明します。これらの関数を使うと、さまざまな方法で数値を操作することができます。
算術計算に関連したトピックでは、点と矩形のところでSenseTalkが幾何学的な点と矩形の概念を理解する仕組みを説明しています。2つの数値のリスト、またはコンマで区切られた2つの数値から成るテキスト文字列は、点として扱うことができます。点と矩形のページで説明する関数を使うと、点または矩形のさまざまな成分値を抽出することが可能です。
算術コマンド
算術コマンドには次の4つがあります。
コンテナに格納された値を変更するときは、これらのコマンドをお使いください。これらのコマンドが果たす算術機能は、+、-、*、/ 演算子と同じです。異なるのは、算術コマンドがオペランドの1つをコンテナから取り、計算結果を再びそのコンテナに格納する点です。
addコマンド
挙動:addコマンドは、コンテナ内の値に数値を加算し、その合計でコンテナ内の値を置き換えるときに使用します。値のリスト同士の加算については、演算元と演算先のリストに含まれるアイテム数が同じであれば行えます。演算元リストの各アイテムが演算先コンテナの対応するアイテムに加算されます。NumExprは演算元の式です。数値でも公式でも、別のコンテナでも構いません。Chunkは、コンテナの部分(行/単語/アイテム/文字)を記述するチャンク式です。Containerは、任意のコンテナです。
構文:
例:
add amount to dollarsVariable
例:
add 37 to item 2 of line 3 of scores
例:
add speed * time to item 1 of distances
例:
add (10,5) to centerPoint
関連:subtractコマンド
subtractコマンド
挙動:subtractコマンドは、コンテナ内の値から数値を減算し、その結果でコンテナ内の値を置き換えるときに使用します。値のリスト同士の減算については、演算元と演算先のリストに含まれるアイテム数が同じであれば行えます。演算元リストの各アイテムが演算先コンテナの対応するアイテムから減算されます。NumExprは演算元の式です。数値でも公式でも、別のコンテナでも構いません。Chunkは、コンテナの部分(行/単語/アイテム/文字)を記述するチャンク式です。Containerは、任意のコンテナです。
構文:
例:
subtract checkAmt from accountBalance
例:
subtract 1 from property CountDown of gameController
例:
subtract rate * pmt from line 4 of amortization
例:
subtract (1,2) from boxDimensions
関連:addコマンド
multiplyコマンド
挙動:multiplyコマンドは、コンテナ内の値に別の数値を乗算し、その積でコンテナ内の値を置き換えるときに使用します。値のリスト同士の乗算は、演算元と演算先のリストに含まれるアイテム数が同じか、演算元が単一の値である場合に行えます。演算先コンテナの各アイテムが、演算元リストの対応するアイテムまたは演算元の単一値によって乗算されます。NumExprは演算元の式です。数値でも公式でも、別のコンテナでも構いません。Chunkは、コンテナの部分(行/単語/アイテム/文字)を記述するチャンク式です。Containerは、任意のコンテナです。
構文:
例:
multiply score by weightingFactor
例:
multiply accountBalance by 1 + interestRate
例:
multiply item 3 of line x of table by 2
関連:divideコマンド
divideコマンド
挙動:divideコマンドは、コンテナ内の値を別の数値で除算し、その商でコンテナ内の値を置き換えるときに使用します。値のリスト同士の除算は、演算元と演算先のリストに含まれるアイテム数が同じか、演算元が単一の値である場合に行えます。演算先コンテナの各アイテムが、演算元リストの対応するアイテムまたは演算元の単一値によって除算されます。NumExprは演算元の式です。数値でも公式でも、別のコンテナでも構いません。Chunkは、コンテナの部分(行/単語/アイテム/文字)を記述するチャンク式です。Containerは、任意のコンテナです。
構文:
例:
divide score by totalCount
例:
divide item 1 of balances by 12
関連:multiplyコマンド
算術関数
数値の操作に使用するための関数です。
abs関数
挙動:数値パラメータの絶対値を返します。絶対値は、符号に関係のない数値の大きさであって、必ず正の値またはゼロになります。
構文:
the abs of 数値要素
abs(数値式)
例:
put abs(-11) -- 11を表示します
例:
if height is a negative number then put abs(height) into height
annuity関数
挙動:期間当たりの指定利率と期間数を基に、1単位の支払に伴う期末払い年金の現在値を計算します。
構文:
例:
put annuity(1%, 32)
関連:compound関数
atan関数
挙動:ラジアンで表された角度のパラメータを三角法のアークタンジェントで返します。
構文:
the atan of 数値要素
atan(数値式)
例:
put atan(19) -- 1.518213を表示します
average関数
挙動:パラメータの平均を返します。numListに入るのは、任意の深さにネストされた、数値のリスト、コンマで区切られた数値のリストとして評価される式、またはこれらの組み合わせのいずれかです。
構文:
{the} average of numList
average(numList)
例:
put average(8, 10, 12) -- 10を表示します
例:
if the average of (x,y,z) is greater than z then
put "Z is below average!"
end if
関連:median関数
compound関数
挙動:指定の利率と期間数を基に、1単位の投資に対する元金と経過利子の合計を計算します。
構文:
例:
put compound(7,25%, 6) -- 1.521892を表示します
例:
put initialInvestment * compound(6.7%, 12) into currentValue
関連:annuity関数
cos関数
挙動:ラジアンで表された角度のパラメータを三角法のコサインで返します。
構文:
{the} cos of 数値要素
cos(数値式)
例:
put cos(18) -- 0.660317を表示します
cube root関数
挙動:パラメータの立方根を計算します。
構文:
put cube root(数値)
put the cube root of 数値
例:
put cube root (27)--3
例:
put the cube root of 8--2
exp関数
挙動:パラメータの自然指数(つまり、数学定数eのパラメータ乗)を返します。
構文:
{the} exp of 数値要素
exp(数値式)
例:
put exp(2) -- 7.389056
exp1関数
挙動:パラメータの自然指数よりも1少ない値(つまり、数学定数eのパラメータ乗マイナス1)を返します。
構文:
{the} exp1 of 数値要素
exp1(数値式)
例:
put expl(2) -- 6.389056
exp2関数
挙動:2のパラメータ乗を返します。
構文:
{the} exp2 of 数値要素
exp2(数値式)
例:
put exp2(8) -- 256
frac関数
挙動:数値の小数部を返します。値の整数部を取得するときは、trunc()関数を使用します。trunc()およびfrac()関数の定義としては、trunc(x) + frac(x)が常にxに等しくなります。
構文:
{the} frac of 数値要素
frac(数値式)
例:
put frac(81.236) -- .236
関連:trunc関数
ln関数
挙動:パラメータの自然対数を返します。
構文:
{the} ln of 数値要素
ln(数値式)
例
put ln(2) -- 0.693147
ln1関数
挙動:パラメータプラス1の自然対数を返します。
構文:
{the} ln1 of 数値要素
ln1(数値式)
例:
put ln1(2) -- 1.098612
log2関数
挙動:パラメータの底2の対数を返します。
構文:
{the} log2 of 数値要素
log2(数値式)
例:
put log2(256) -- 8
maximum、max、highestValue、largestValue関数
挙動:リストから最高値を返します。maximum関数は、maxと省略しても構いません。numListに入るのは、任意の深さにネストされた、数値のリスト、コンマで区切られた数値のリストとして評価される式、またはこれらの組み合わせです。
構文:
{the} max{imum} of numList
max{imum}(numList)
例:
put max(4, 6, 5, 7, 3) -- 7
例:
if the maximum of (x,y,z) is z then
put "Z is the greatest!"
end if
例:
put largestValue of (2,23,45,76) --76
例:
put highestValue of (3,9,13,21,42) --42
関連:minimum関数
median関数
挙動:パラメータの中央(中間値)、または2つの中間値の平均を返します。numListに入るのは、任意の深さにネストされた、数値のリスト、コンマで区切られた数値のリストとして評価される式、またはこれらの組み合わせのいずれかです。numListに含まれる数値が奇数個の場合は、ソートした数値リストの中央の値がmedianとなり、偶数個の場合は、2つの中間値の平均がmedianとなります。
構文:
{the} median of numList
median(numList)
例:
put median(1, 8, 9, 12) -- 8
例:
put the median of "2,7,8,10" -- 7.5
関連:average関数
minimum、min、lowestValue、smallestValue関数
挙動:リストから最低値を返します。minimum関数は、minと省略しても構いません。numListに入るのは、任意の深さにネストされた、数値のリスト、コンマで区切られた数値のリストとして評価される式、またはこれらの組み合わせです。
構文:
min{imum}(numList)
例:
put min(4,6,5,7,3) -- 3
例:
if the min of (x,y,z) is z then put "Z is the smallest!"
例:
put lowestValue of (3,9,13,21,42) --3
例:
put smallestValue of (9,13,21,56,72) --9
関連:maximum関数
random関数
挙動:1からパラメータ値までの間、または2値間でランダムに生成された整数を返します。
構文:
random(数値式 {, 第2式} )
例:
put random(12) -- 1~12の任意の数値を返します
例:
put random(20,30) -- 20以上30以下の値を1つ取得します
例:
put (random(100) / 100) into randomPercentage
関連:reset randomコマンド
reset randomコマンド
挙動:random関数やSenseTalkがランダムな選択を行うときに必ず使用される乱数ジェネレータのシーケンスをリセットします。乱数ジェネレータに特定のシード式の値を設定すると、「ランダム」イベントの繰り返し可能なシーケンスを得ることができます。これは、テスト用途において非常に便利です。予測不能なシーケンスを得る場合は、シード値なしでreset randomコマンドを使用します。
構文:
例:
reset random with seed 27
例:
reset random
例:
reset random 2
repeat 10 times
put 1..10 into NumberRange
put any item of NumberRange into ReplaceitemNumber
log ReplaceitemNumber // この1行目のようにreset random [#]を使用すると、ループを実行するたびに同じリストが返されます。
[#]には任意のシード数を入れることができます。
// 1行目の「reset random 2」をコメントアウトして、複数回にわたりrepeatループを実行すると、ループを実行するたびに異なるリストが返されます。
end repeat
round関数
挙動:パラメータの値を最も近い整数に四捨五入して返します。オプションの第2パラメータを与えると、四捨五入する小数位の数を指定することができます。位の数を負にすると、小数点より左側で四捨五入されます。
構文:
round(数値式, 小数位)
例:
put round(6.5) -- 7
例:
put round(6.49) -- 6
例:
put round(6.49 , 1) -- 6.5
例:
put round(2389 , -2) -- 2400
関連:
- roundToNearest関数
- rounded to演算子
roundToNearest関数
挙動:第1パラメータの値を最も近い第2パラメータの整数倍に四捨五入して返します。
構文:
roundToNearest(数値式, 最近値用の倍数)
例:
put roundToNearest(643,100) -- 600
例:
put roundToNearest(643,25) -- 650
関連:
- round関数
- rounded to nearest演算子
sin関数
挙動:ラジアンで表された角度のパラメータを三角法のサインで返します。
構文:
{the} sin of 数値要素
sin(数値式)
例:
put sin(18) -- -0.750987
square root、sqrt関数
挙動:パラメータの平方根を返します。
構文:
{the} square root of 数値要素
{the} sqrt of 数値要素)
sqrt(数値式)
例:
put sqrt(16) -- 4
例:
put the square root of nine -- 3
sum関数
挙動:パラメータの合計を返します。numListに入るのは、任意の深さにネストされた、数値のリスト、コンマで区切られた数値のリストとして評価される式、またはこれらの組み合わせです。
構文:
{the} sum of numList
sum(numList)
例:
put sum("8,1", (10,11), 12) -- 42を表示します
例:
if the sum of (x,y,z) is more than 100 then
put "The sum exceeds 100"
end if
tan関数
挙動:ラジアンで表された角度のパラメータを三角法のタンジェントで返します
構文:
{the} tan of 数値要素
tan(数値式)
例:
put tan(18) -- -1.137314
trunc関数
挙動:数値を切り捨てて、小数部は破棄し、パラメータの整数部を返します。値の小数部を取得するときは、frac関数を使用します。trunc()およびfrac()関数の定義としては、trunc(x) + frac(x)が常にxに等しくなります。
構文:
{the} trunc of 数値要素
trunc(数値式)
例:
put trunc(6.8) -- 6
例:
put trunc(6.49) -- 6
関連:frac関数