Concurrent Clean : CleanJ : n_S.1, n_S.2, ...
_system.abcを思い出したのは、StdListの移植をやっているときに、n_S.1などの関数エントリーのラベルが出てきたためで、これが、_system.abcに定義されていたからだ。
で、この関数、定義を見ても、何をやりたいのかわからない。何せ、対応するiclファイルがない上に、まだ未解釈のABC命令が含まれていたりするので、お手上げな感じ。
-
-
- -
-
そこで、呼び出している側を確認して、そこから推論してみることに。
removeIndex :: a !u:[a] -> (Int,u:[a]) | Eq a removeIndex e xs = removei e xs 0 where removei :: a u:[a] !Int -> (Int,u:[a]) | == a; removei e [x:xs] i | x==e = (i,xs) = (j,[x:res]) with (j,res) = removei e xs (inc i) removei e [] i = abort "Error in removeIndex: element not found"
という関数の、
= (j,[x:res])
という部分が、
else.34 push_b 2 push_a 1 push_b 2 push_b 2 build_u _ 1 3 n180 push_a 0 build d_S.2 -1 n_S.2 push_a 2 buildh _Cons 2 push_a 1 build d_S.1 -1 n_S.1 update_a 1 4 updatepop_a 0 3 pop_b 3 .d 2 0 rtn
という形に変換されていることを見つけたので、ここから解読を進めることにする。
-
-
- -
-
・・・・・・・!
あ、タプルから要素を取り出しているのか。