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

という形に変換されていることを見つけたので、ここから解読を進めることにする。

      • -

・・・・・・・!
あ、タプルから要素を取り出しているのか。