2014-03-30 86 views
1
fun in_list (x : int, y : int list) = 
if null y 
then false 
else if x=hd y then true 
else in_list(x,tl y) 

這就是我的代碼目前的樣子,它只是返回true,如果x出現在y列表中,則返回true,否則返回false。問題是我希望它能夠輸入「a」和[「a」,「b」,「c」],或者甚至有x是列表,y是列表的列表。我非常新到ML(上週剛剛開始瞭解它),並且已經尋找答案並且不能提出任何問題。SML參數的變量類型

+0

注意:'如果A然後假別別B'只是說'不是A和B'的複雜方式,同樣,'如果A然後是真的其他B'就是'A orelse B'。所以你的代碼可以寫成'not(null y)andalso(x = hd y orelse in_list(x,tl y))''。 –

回答

2

如果更改第一行

fun in_list (x : ''a, y : ''a list) = 

那麼它會表現爲你想要的。這裏''a是一個相等類型的變量,它可以代表任何支持=運算符的類型。

您也可以完全忽略這些類型,並推斷出最一般的正確類型。

0

類型在函數聲明中總是可以省略,只有一個例外:運算符的重載可能導致模糊。一個例子是

fun square x = x*x 

,因爲x的類型可以是int或real。 (它會默認爲int,也許不是你想要的。)

問題是隻有一個函數hd。但是運營商*可以參考兩個完全不同的功能。