![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Bard |
![]() ![]()
Сообщение
#1
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Всем здраво! У меня тут в универе начали СМЛ прходить как ввод в Функциональное программирование. Никак не могу разобраться с этим языком. Надеюсь на вашу помощь, если вообще кто-то разбираеться в этом...
На Паскале или Си я бы код с закрытыми глазами написал, но тут не все так просто... Вот 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 вот и все. у кого какие идеи? я думаю что во всех задачах такого типа в СМЛ без рекурсии никак. Спасибо заранее... -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
Bard |
![]()
Сообщение
#2
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Для последней задачи алгоритм я нашел... даже код написал но что то не компилиться
![]() fun f(nil, N) = nil; | f(list , 0) = list; | f(list ,N ) = [[b]max(list)] @ f(exclude(list,max(list)),N-1);[/b] просто тут 2 проблемы во первых как найти макс. элемент списка, во вторых как написать функцию exclude которая исключает макс. элемент списка. кто нибудь знает синтаксис СМЛ? -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Я, конечно, не специалист по функциональным языкам, но:
fun f(nil, N) = nil; | f(list , 0) = list; | f(list ,N ) = [max(list)] @ f(exclude(list,max(list)),N-1); Выделенное красным - явно лишнее |
Bard |
![]()
Сообщение
#4
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Я, конечно, не специалист по функциональным языкам, но: fun f(nil, N) = nil; | f(list , 0) = list; | f(list ,N ) = [max(list)] @ f(exclude(list,max(list)),N-1); Выделенное красным - явно лишнее Ну да это понятно... вопрос в том что нет такого понятия exclude в SML. надо самому эту функцию написать... а вот как не знаю ![]() -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Нету, надо написать функцию, которая удалит все вхождения элемента X в список L:
- fun exclude(x, L) = |
Bard |
![]()
Сообщение
#6
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Отлично!!! Спасибо огромное volvo! Но пока не идеально работает. Остался последний шаг.
вот код программы: Код fun max [x] = x | max (x::xs) = let val m = max xs in if x > m then x else m end fun exclude(x1, L) = if (L = []) then [] else (if (x1 = hd(L)) then exclude(x1, tl(L)) else hd(L)::exclude(x1, tl(L))); fun f(nil, N) = nil | f(m, 0) = m | f(m, N) = [max(m)]@f(exclude(max(m),m), N-1); нам нужно чтобы он удалял не все вхождения Х а только ту которая проверяться на этом шагy. Сообщение отредактировано: Bard - 30.09.2009 20:14 -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
Bard |
![]()
Сообщение
#7
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Для ввода:
[1,2,4,3,4,10,2,3,4,32,6,6,4,7] 7 ответ должен быть: [32,10,7,6,6,4,4] а моя прога выдает: [32,10,7,6,4,3,2,1] -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата нам нужно чтобы он удалял не все вхождения Х а только ту которая проверяться на этом шагy. Это достигается небольшой корректировкой exclude:- fun exclude(x, L) = - exclude(1, [2, 1, 3, 1, 5, 4, 1]); , то, что нужно, правда? Только теперь F возвращает какой-то бред по-моему. Проверь у себя, может, я ошибся где-то? |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Да, это в F ошибка, вот так надо:
fun f(nil, N) = nil |
Bard |
![]()
Сообщение
#10
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Ну помоему интересная тема... я продолжу
![]() Тут такая задачка. У меня с алгоритмизацией все ок только как всегда проблема с грамматикой СМЛ. короче простенькая задачка. Надо отсортировать элементы заданного списка в убывающем или возрастающем порядке в зависимости от запроса. подпись: 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 -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
Bard |
![]()
Сообщение
#11
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Вот последний код:
Код fun f(x,[])=[x] | f (x,xs as h::t)=if (x<h) then x::xs else h::(f(x,t)) val sort1 = List.foldr f []; fun reverse(nil) = nil | reverse( x::xs) = reverse(xs)@[x]; fun sort (op<,L) = sort1(L) | sort (op>,L) = reverse(sort1(L)); но почему то не компилиться ![]() где ошибка? -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 11:47 |