これは紛らわしいですが、機能するコードです。k::ksが「リストリスト」ではなく「リストリストリスト」として扱われる理由を理解するのに少し助けが必要です。リストとリストのリストを取り、最初のリストが必要かどうかを確認したいと思います。つまり、最初のリストのすべての要素が別のリストにあるかどうかということです。
fun do1(a,[],_)=false
|do1(a,k::ks,n)=if a=List.nth(k,n)orelse do1(a,ks,n) then true else false;
val n=0;
fun do2([],k::ks,_)=[]
|do2(_,[],_)=raise unexpected
|do2(l,k::ks,n)=if List.nth(l,n-1)=0 then do2(l,k::ks,n+1)
else
if do1(l,k::ks,n) then []
else l;
繰り返される質問:k::ksが「リストリスト」ではなく「リストリストリスト」として扱われる理由を理解するのに少し助けが必要です。
ありがとうございました。