IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> задачки по СМЛ, функциональное программирование
Bard
сообщение 30.09.2009 0:26
Сообщение #1


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

Репутация: -  3  +


Всем здраво! У меня тут в универе начали СМЛ прходить как ввод в Функциональное программирование. Никак не могу разобраться с этим языком. Надеюсь на вашу помощь, если вообще кто-то разбираеться в этом...
На Паскале или Си я бы код с закрытыми глазами написал, но тут не все так просто...

Вот 3 очень простые задачки:

1) Построить функцию removeDupl типа string которая уберет все подряд повторяющиеся элементы заданной строки и оставит только одну из них.

подпись функции: val removeDupl = fn : string -> string

пример:

-removeDupl("aabbacccddd");

val it = "abacd" : string



2) Построить функцию triangle типа int list list которая по заданному N выдаст список списков по которым можно построить треугольник высоты N.

подпись функции: val triangle = fn : int -> int list list

пример:

-triangle(4);

val it = [[1],[1,1],[1,1,1],[1,1,1,1]]



3) Построить функцию getNlargest типа int list которая по заданному N и списку чисел выдаст самые большие N чисел из заданного списка чисел.

подпись функции: val getNlargest = fn : int -> int list -> int list

пример:

- getNLargest 7 [1,2,4,3,4,10,2,3,4,32,6,6,4,7];

val it = [32,10,7,6,6,4,4] : int list


вот и все. у кого какие идеи? я думаю что во всех задачах такого типа в СМЛ без рекурсии никак.

Спасибо заранее...


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Bard
сообщение 9.10.2009 2:20
Сообщение #2


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

Репутация: -  3  +


Ну помоему интересная тема... я продолжу smile.gif

Тут такая задачка. У меня с алгоритмизацией все ок только как всегда проблема с грамматикой СМЛ. короче простенькая задачка. Надо отсортировать элементы заданного списка в убывающем или возрастающем порядке в зависимости от запроса.

подпись: val it = fn : (''a * ''a -> bool) -> ''a list -> ''a list

пример:

- sort op< [4,2,6,1,7];
val it = [1,2,4,6,7] : int list

- sort op> [4,2,6,1,7];
val it = [7,6,4,2,1] : int list

вот мое алго вставочным сортом:
Код

/*в возрастающем порядке*/
fun f(x,[])=[x]
   | f (x,xs as h::t)=if (x<h) then x::xs else h::(f(x,t))
val sort=List.foldr f [];

/*в убывающем порядке*/
fun f1(x,[])=[x]
   | f1 (x,xs as h::t)=if (x>h) then x::xs else h::(f1(x,t))
val sort1=List.foldr f1 [];


как мне добавить проверку на op> или op< чтобы в зависимости от запроса заработала нужная функция?

Сообщение отредактировано: Bard - 9.10.2009 2:23


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.07.2025 11:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"