2012-10-04 72 views
-1

我是SML的初學者。這很容易,但它需要幾個小時,但我無法解決它。更好地理解錯誤

我必須採取一個字符串的列表,並反轉每個字符串以及列表。並且做所有事情,而不是在主體之外定義多種功能例如[ 「堆」, 「溢出」, 「好」]將得到[ 「ecin」, 「wolfrevo」, 「kcats」]

fun oppositelist(l)=foldl (op::) nil (map ((fn(x)=>(implode o rev o explode)(x)), l)); 

和錯誤信息是:

Error: operator and operand don't agree [tycon mismatch] 
    operator domain: 'Z -> 'Y 
    operand:   (string -> string) * 'X 
    in expression: 
    map ((fn x => <exp> <exp>),l) 

別解決所有問題,如果方法錯誤。提示一下。它是一個功課問題。

謝謝。

+0

無論如何回答,然後downvoted,因爲我相信這是你應該對你的TA的問題,而不是「凌亂」StackOverflow。 – Quuxplusone

回答

1

SML功能mapcurried。要將函數f映射到列表l的每個元素上,必須編寫map f l。你寫的是map (f,l),意思是「將函數(f,l)映射到......稍後要確定的東西。」編譯器正在抱怨你,因爲(f,l)而不是函數('Z -> 'Y);它是一個由函數和列表組成的元組((string -> string) * 'X)。

我沒有仔細看過你的解決方案,但是如果你在回答這個問題時發表評論並問我,我可能會這麼做。 :)

編輯:哦,(fn(x)=>(implode o rev o explode)(x))是寫(implode o rev o explode),出於同樣的原因,寫(fn(x)=>f(x))是寫f的長篇大論方式只是一個囉嗦的方式。

+0

謝謝!這是代碼唯一的錯誤!它現在工作! :) – 700resu