2013-10-15 3 views
1

Мне нужно создать свою собственную функцию concat и смутить, как я получаю требуемый результат. Пример:Создание моей собственной функции Concat (SML)

myconcat ([ "а", "б", "в"]) возвращает "ABC"

([]) возвращает ""

у меня есть это:

fun myconcat ([],L2) = L2 
| myconcat(x::xs, L2) = x::myconcat(xs,L2); 

Что именно возвращает список моих двух строк. Как я могу заставить их выводить то, что мне нужно?

ответ

4

У вас, кажется, нет правильного типа.
Пример имеет тип string list -> string, где ваша функция, похоже, имеет тип 'a list * 'a list -> 'a list.

Чтобы объединить две строки, вы должны использовать ^, а не ::.

Первый имеет тип string * string -> string, а последний имеет тип 'a * 'a list -> 'a list. Поскольку строки не являются списками в SML, попытка связать их с :: вызовет ошибку типа .

на самом деле делать то, что вы хотите, самым простым способом, попробуйте

fun myconcat L = foldr (op^) "" L 
+0

Чтобы расширить, что 'весело myconcat L = foldr (п (s1, результат) => s1^результат) "" L ' –

Смежные вопросы