曜日計算を行うモデルを構成せよ。曜日計算とは,月曜日+火曜日=水曜日,水曜日+金曜日=月曜日となるような計算である。
曜日計算には,色々な計算方法が知られているが,一番簡単なものは,曜日を数字に変換し,数字で計算し,結果を再度曜日に戻すという方法である。例えば,水曜日+金曜日ならば,水曜日を3に,金曜日を5に直し,3+5=8として後,8÷7=1…1なので,余りの1を月曜日に直すというやり方である。
モデルは,以下のワーキングメモリの(Add x y)のx,yを書き直すことで,あらゆる曜日の組み合わせの計算が可能なように,変数を用いて記述すること。答えは,(Answer z)のzの値として求められるようにせよ。
モデルは,Daycalcという名前で保存しておくこと。
以下がワーキングメモリの内容である。
これを,システムのワーキングメモリにコピペせよ。
- (Add WED FRI) - (Day SUN 0) - (Day MON 1) - (Day TUE 2) - (Day WED 3) - (Day THR 4) - (Day FRI 5) - (Day SAT 6)
■TransToNum
最初に(Add MON TUE)という曜日計算を,(AddNum 1 2)という数字の計算に変換する。
IF節 (Add # #) (Day # #) (Day # #) THEN節 (*delete (Add # #)) (*deposit (AddNum # #))
■AddNum
次に,(AddNum 1 2)という数字の足し算を行い,結果を(AnswerNum 3)として書き込む。
*plusは足し算を行う関数で,(*plus x y)は,x+yの結果を返す(に置き換わる)。
*moduloは割り算の余りを計算する関数で,(*modulo x y)は,x÷yの余りを返す(に置き換わる)。
IF節 (AddNum # #) THEN節 (*delete (AddNum # #)) (*deposit (# (*modulo (*plus # #) #)))
■TransToLetter
(AnsserNum 3)の結果を,曜日に置き換えて最終的に(Answer WED)として書き込む。
IF節 (AnswerNum #) (Day # #) THEN節 (*delete (AnswerNum #)) (*deposit (Answer #))