数式処理ソフト

昨日はSingular、今日はMapleを使ってみています。慣れないものは使いにくいです。
Singularはringを変換する度に変数のスコープが外れてしまうのが何とも使いにくいです。proc内でringを定義するにはexecuteを使わないといけないというのはどうだろう。procの引数にringを与えようとして proc hoge(ring a) とか書くと怒られるのは何故? まぁ引数の型を指定しなければいいんですが。ringの代入をしようとして「ring a = b;」と書くと怒られるのは何故? まぁ「def a = b;」と書けばいいんですが。あと ring == ring の判定を拒否するのは何で? ring も型だってマニュアルには書いてあるのに。まぁ そんなこんなで。
Mapleは最初配列の長さを知るための方法がわからずに数時間悩んでしまいました。length(array)じゃだめなんだよなぁ〜とか。nops(array)でいいんですね。これはスマートでいいかも。しかしプログラム変数と代数としての変数がごっちゃになっているというのは気持悪いです。eval をしなければいけないタイミングもまだよくわかってません(これは慣れ?)。道具が揃っていたり for a in A do ... みたいな書き方ができるってのは気持いいですが。やー、でも変数のタイプが… うーん。