Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
01.02.2015, 17:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от taras atavin Посмотреть сообщение
я, в отличие от тебя, знаком с темой
Это уже все поняли
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.02.2015, 17:01
Ответы с готовыми решениями:

Delphi !? Плюсы и минусы
Почему при поиске работы через Internet в странах Европы и Америки очень редко можно встретить необходимость в Delphi?

Студентская жизнь.Ее плюсы и минусы.
Студентская жизньпрекрасна...Так говорят.А как думаешь ты?

Что вы делаете необычное на форуме(плюсы и минусы)
что вы делаете на форуме не обычного? Ну не так как все... Вот пример: прежде чем ответить кому-либо, почему-то смотрю его профиль,...

262
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
02.02.2015, 13:46
Цитата Сообщение от korvin_ Посмотреть сообщение
То, что корректная программа может не пройти проверку типов:
Haskell
1
2
3
xs :: [Int]
xs = []
main = let f g = (g xs, g 'a') in print $ f id
Не вижу в ней ничего корректного. Вообще с такой логикой и дальше можно пойти и заявить, что мол следующая функция
Haskell
1
2
inc :: Num a => a -> a
let inc x = x + "1"
тоже корректная. Типа ну а чо, все ж очевидно и наглядно, инкрементируем значение x, должно работать, лол.

Сразу скажу, что мои познания в haskell'е слабы поэтому не могу продемонстрировать пример полиморфного использования функции в таком контексте. Но вот на C++ это выглядело бы примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <typename F, typename Arg>
auto apply( Arg arg ) {
  return std::make_tuple( F()( arg ) );
}
 
template <typename F, typename Arg, typename... Args>
auto apply( Arg arg, Args... args ) {
  return std::tuple_cat( apply<F>( arg ), apply<F>( args... ));
}
 
struct Id {
 
  template <typename T>
  auto operator()( T obj ) {
    return obj;
  }
  
};
 
int main() {
  auto x = apply<Id>( 1, 2, 3, 'a', std::list<int>() );
  return 0;
}
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
02.02.2015, 14:54
А что надо? Функция, которая ведет себя по разному с разными типами? Так вот же
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(define (foo arg)
  (let/cc return
    (when (number? arg) (return (+ (* arg 10) arg)))
    (when (list? arg) (return (reverse arg)))
    (when (string? arg) (return (string-append arg arg)))
    (return (void))))
 
;Добро пожаловать в DrRacket, версия 6.1.1 [3m].
;Язык: racket; memory limit: 128 MB.
> (map foo '(1 "asdf" (a s d f) #[1 2 3]))
'(11 "asdfasdf" (f d s a) #<void>)
>
0
Модератор
 Аватар для Curry
5165 / 3527 / 536
Регистрация: 01.06.2013
Сообщений: 7,677
Записей в блоге: 9
02.02.2015, 15:07
Пример рекурсии.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
02.02.2015, 17:02
Цитата Сообщение от Voivoid Посмотреть сообщение
Не вижу в ней ничего корректного.
Цитата Сообщение от Voivoid Посмотреть сообщение
Но вот на C++ это выглядело бы примерно так
Взаимоисключающие параграфы?

Цитата Сообщение от Voivoid Посмотреть сообщение
Вообще с такой логикой и дальше можно пойти и заявить
Нельзя. Мой пример корректен, ибо id полиморфна и принимает аргумент любого типа. Проблема только в том, что Хаскелл не позволяет описать такую apply своими средствами. Остаётся только TH, но я не рассматривал подробно пример тов. KolodeznyDiver.

Цитата Сообщение от castorsky Посмотреть сообщение
которая ведет себя по разному с разными типами?
Нет, которая ведет себя одинаково с разными типами.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
02.02.2015, 17:22
korvin_, что понимать под "одинаково"? Пока склоняюсь к противоречию. Функция определена на множестве, отображение может быть на другое множество. Нужен дженерик, имитирующий похожий результат для всех возможных множеств? 1 + 1 = 11, "foo" + "bar" = "foobar", '(1) + '(a) = '(1 a) - это одинаково?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.02.2015, 17:23
А разве нет?
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
02.02.2015, 17:38
Цитата Сообщение от taras atavin Посмотреть сообщение
А разве нет?
Я лучше поосторожничаю чем делать выводы из Ваших комментариев
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
02.02.2015, 17:52
Цитата Сообщение от castorsky Посмотреть сообщение
что понимать под "одинаково"? Пока склоняюсь к противоречию. Функция определена на множестве, отображение может быть на другое множество. Нужен дженерик, имитирующий похожий результат для всех возможных множеств? 1 + 1 = 11, "foo" + "bar" = "foobar", '(1) + '(a) = '(1 a) - это одинаково?
Речь не о функциях id и show. Речь о функции apply.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
02.02.2015, 17:56
Цитата Сообщение от korvin_ Посмотреть сообщение
Взаимоисключающие параграфы?
Я вероятно не совсем ясно выразился. Имелось в виду следующее:
"Я не вижу в твоем коде ничего корректного ( в том смысле, что ошибка компиляции в нем вполне ожидаема ), но
задачу, которую ты этим кодом пытался решить, я понял и её реализация на C++ выглядела бы примерно вот так."

Цитата Сообщение от korvin_ Посмотреть сообщение
Мой пример корректен, ибо id полиморфна и принимает аргумент любого типа. Проблема только в том, что Хаскелл не позволяет описать такую apply своими средствами
Мой пример корректен, ибо строка "1" может быть приведена к числу 1. Проблема только в том, что в Хаскелл нет перегруженного оператора + который позволяет складывать числа со строками


Но вообще я не очень понимаю что ты хочешь этим сказать. Что возможны такие ситуации, в которых конкретная система типов окажется бессильна? Ну-у-у, вполне возможно, только подозреваю, что они носят весьма теоретический характер и на практике вряд-ли встречаются. Если же у тебя есть какие-нибудь примеры, давай, попробую написать на C++ типобезопасную реализацию
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
02.02.2015, 18:51
korvin_, приведи сюда, пжлст, пример с show. Ссылки почикали.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
02.02.2015, 20:55
Цитата Сообщение от korvin_ Посмотреть сообщение
Речь не о функциях id и show. Речь о функции apply.
у apply одно назначение: "соединить" функцию и список аргументов (аппликация). Следовательно я делаю вывод что список может быть составлен из разных типов и функция для них одна. Оно?
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(require racket/match)
 
(define (bar x)
  (match x
    ((? number?) number->string)
    ((? char? ) string)
    ((? symbol?) symbol->string)
    (_ identity)))
 
(define (fold . xs)
  (let loop ((args xs) (acc ""))
    (match args
      ((cons (? list?) xs)
       (loop xs (string-append acc (loop (car args) ""))))
      ((cons (? vector?) xs)
       (loop xs (string-append acc (loop (vector->list (car args)) ""))))
      ((cons x xs)
       (loop xs (string-append acc ((bar x) x))))
      (_ acc))))
 
> (apply fold `(2 + 3 * e ^ #e.23))
"2+3*e^23/100"
>
0
Модератор
 Аватар для Curry
5165 / 3527 / 536
Регистрация: 01.06.2013
Сообщений: 7,677
Записей в блоге: 9
02.02.2015, 21:19
"Сломал" я Haskell с помощью "аццкава" расширения (не рекомендованного к использованию, как небезопасное)
Haskell
1
2
3
4
5
6
{-# LANGUAGE ImpredicativeTypes #-}
 
f :: (Show b, Show c) => (forall a. Show a =>  a -> d) -> (b,c) -> (d,d)
f get (b,c) = (get b, get c)
 
main =  print $ f show (1, 'a')
Только не надо теперь говорить, что и Show не дОлжно указывать. Это уже совсем другая история.
Цитата Сообщение от castorsky Посмотреть сообщение
Нужен дженерик, имитирующий похожий результат для всех возможных множеств? 1 + 1 = 11, "foo" + "bar" = "foobar", '(1) + '(a) = '(1 a) - это одинаково?
"Давайте спорить, но прежде давайте условимся в терминах" (c) Сократ
Что под операцией, обозначенной как + понимать, сами можем решить. Кстати, два последних варианта в Haskell одно и тоже если использовать ++ вместо + .
Цитата Сообщение от Voivoid Посмотреть сообщение
Проблема только в том, что в Хаскелл нет перегруженного оператора + который позволяет складывать числа со строками
И славатехосспоти что нет
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
02.02.2015, 21:28
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Что под операцией, обозначенной как + понимать, сами можем решить.
Я думаю что об этом даже вслух не надо говорить. И так ясно.
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
И славатехосспоти что нет
и хосподиспасиисохрани весь люд от крестов этих
0
Модератор
 Аватар для Curry
5165 / 3527 / 536
Регистрация: 01.06.2013
Сообщений: 7,677
Записей в блоге: 9
02.02.2015, 21:58
Цитата Сообщение от castorsky Посмотреть сообщение
Я думаю что об этом даже вслух не надо говорить. И так ясно.
К чему тогда Вы этот пример привели?

Добавлено через 3 минуты
Кстати, и при чём Вы к ночи упоминали дженерики? Даже если иметь ввиду не эти дженерики.

Добавлено через 15 минут
Цитата Сообщение от castorsky Посмотреть сообщение
и хосподиспасиисохрани весь люд от крестов этих
... и от ImpredicativeTypes . Я их, позволю себе вольно перевести как "непредсказуемые типы" (unpredictable - какая разница ). Невменяемые в общем. А от невменяемых типов нужно держаться подальше.
И, похоже, в некоторых языках только такие типы и есть.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
02.02.2015, 22:04
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
К чему тогда Вы этот пример привели?
Только для наглядности. Визуальное сопровождение текста вносит конкретику в его восприятие.
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Кстати, и при чём Вы к ночи упоминали дженерики?
А почему их так называют? В контексте моего понимания проблемы я думаю аналогия понятна.
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
... и от ImpredicativeTypes . Я их, позволю себе вольно перевести как "непредсказуемые типы" (unpredictable - какая разница ). Невменяемые в общем. А от невменяемых типов нужно держаться подальше.
Ну это проблемы хацкеляторов.
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
И, похоже, в некоторых языках только такие типы и есть.
Например. В любом языке есть тип "байт". Опять дроч неудачный вброс?
0
Модератор
 Аватар для Curry
5165 / 3527 / 536
Регистрация: 01.06.2013
Сообщений: 7,677
Записей в блоге: 9
02.02.2015, 22:21
Цитата Сообщение от castorsky Посмотреть сообщение
Например. В любом языке есть тип "байт".
Как он связан с реализациями ПП, о которых речь и шла?
И в Haskell байт (Word8) можно применять без всяких ImpredicativeTypes.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
02.02.2015, 22:55
Цитата Сообщение от castorsky Посмотреть сообщение
Оно?
Зачем ты всё усложняешь?
Lisp
1
(mapcar #'print-to-string '(1 2.3 "45"))
Добавлено через 1 минуту
Цитата Сообщение от nullxdth Посмотреть сообщение
приведи сюда, пжлст, пример с show. Ссылки почикали.
Haskell
1
2
3
4
f :: ?
f g (x, y) = (g x, g y)
 
main = print $ f show (1::Int, "23")
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
02.02.2015, 23:03
Цитата Сообщение от korvin_ Посмотреть сообщение
Зачем ты всё усложняешь?
Да, действительно. Постигаю суть вопроса методом проб и ошибок.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
02.02.2015, 23:06
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Haskell
1
f :: (Show b, Show c) => (forall a. Show a => *a -> d) -> (b,c) -> (d,d)
А если вместо (forall a. Show a => *a -> d) взять (forall a. Show a => *a -> a), будет
Haskell
1
f2 :: (forall a. a -> a) -> (b, c) -> (b, c)
?
Но вернемся к варианту с Show, как мне теперь сделать эту функцию (f) полиморфной относительно тайпкласса? Типа

Haskell
1
f :: class c ==> (c a, c b) => (forall t. c t => *t -> t') -> (a, b) -> (t', t')
Добавлено через 1 минуту
Цитата Сообщение от Voivoid Посмотреть сообщение
Проблема только в том, что в Хаскелл нет перегруженного оператора + который позволяет складывать числа со строками
Как и в Scheme. Какое это имеет отношение к вопросу? В моем примере нет сложений чисел со строками, только законные действия.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.02.2015, 23:06

Какой язык веб-программирования выбрать? Плюсы\минусы
Вопрос что ни на есть из раздела священных, но все же... Какой язык веб-программирования кто предпочитает? У кого какие плюсы и...

Плюсы и минусы
Господа, хочется узнать ваше мнение по такому варианту работы с сервером терминалов. Хочу предложить к рассмотрению: Cервер...

Плюсы и минусы C#
Добрый день! Не хочу ни в коем случае развязывать вечную войну идущей между Delphi и С, но требуется грамотный взвешенный ответ. Вообще...

Плюсы и минусы
В массиве Z(m) найти число чередований знака, то есть число переходов с плюсов на минус или с минуса на плюс. Например, в...

Плюсы и минусы J2se
Ребята, такой вопрос... Какие преимущества есть у j2se перед другими языками? и почему изучают именно его , а не чтото другое? ведь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru