関数は次のように宣言する必要があると思います。
fun memeber3 (x,xs)= foldl (fn (y,b)=>b orelse x=y) false xs
最後に xs を使用していることに注意してください。この場合、次のようにして使用できます。
val x = memeber3(1,[1,2,3])
または、次のように宣言された可能性があります
fun memeber3 x = foldl (fn (y,b)=>b orelse x=y) false
この場合、カリー化を使用します: 引数の括弧の欠如と引数 xs の欠如に注意してください。これは、 member3 と fold の両方が最後の引数としてリストを想定しているため、宣言を回避できるためです。このようにして、member3 はリスト xs を期待する新しい関数を実際に生成します。
そして、あなたはそれを次のように使うことができました:
val x = memeber3 1 [1,2,3]
括弧を使用しない呼び出しに注意してください。これはカリー化された呼び出しです。
ここで fold を使用することの問題点は、最初の繰り返しで探していた要素が見つかったとしても、リスト全体を調べなければならないことです。それは次善の解決策です。
探していたものが見つかったら、それ以上の計算は避けたほうがよいと思います。やや好き:
fun exists(e, xs) =
case xs of
[] => false
| x::xs' => x = e orelse exists(e, xs')
ここでの orelse 演算子の短絡的な性質により、要素が見つかった場合、exists の別の反復を呼び出すことを回避できます。