我有這樣的代碼來過濾字符串列表中的第一個字母是大寫:SML:如何使用List.filter
fun f s = Char.isUpper(String.sub(s,0));
fun only_capitals (xs : string list) = List.filter(f , xs);
但是,當編譯,我總是收到錯誤:
operator domain: 'Z -> bool
operand: (string -> bool) * string list
in expression:
List.filter (f,xs)
我不知道如何解決這個問題。可以告訴我,這個錯誤是什麼意思,以及如何解決這個問題。
謝謝:)
這似乎是Dan Grossman的(Coursera/U Washington)編程語言分配hw#3,問題#1。 「編寫一個函數'only_capitals',它接受一個字符串列表並返回一個字符串列表,該列表只包含以大寫字母開頭的字符串,假設所有字符串都至少有一個字符,使用'List.filter','Char .isUpper'和'String.sub'來製作1-2行解決方案。「 –
這可能值得引用Grossman的講義第13頁來指導這項任務。 「例如,List.foldl((fn(x,y)=> x + y),0,[3,4,5])不會因爲List而進行類型檢查。foldl期望'a *'b - >'b函數,而不是三元組。正確的調用是List.foldl(fn(x,y)= x + y)0 [3,4,5] ...「它使用currying,是推力,這也讓我絆了一會兒。 – brntsllvn