Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/103: Рейтинг темы: голосов - 103, средняя оценка - 4.66
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,422

Растолкуйте основы

07.08.2019, 09:37. Показов 19759. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Я тут пытаюсь погрузиться в чудесный мир F# и понять что это и зачем надо.
Нашёл вот такой пример:
F#
1
2
3
4
5
6
7
8
let square x = x * x
 
let sumOfSquares n =
    [1..n] // Создадим список с элементами от 1 до n
    |> List.map square // Возведем в квадрат каждый элемент
    |> List.sum // Просуммируем их!
 
printfn "Сумма квадратов первых 5 натуральных чисел равна %d" (sumOfSquares 5)
Понял из него куда меньше, чем хотелось бы. Вот что я понял:
Создаётся функция square, которая принимает параметр x, который автоматически определяется как число, умножается сам на себя и он же возвращается.
Создаётся функция sumOfSquares, которая принимает значение n, которое определяется как число, которое используется для указания размера списка. Возвращает функция тоже число.
А вот дальше пошла магия. То что |> List.map square - это вызов функции square для каждого элемента списка, я догадался. Но откуда вообще взялись элементы списка, если я не передал ничего кроме размера? Список заполняется автоматически по возрастанию, если не указать обратное? Как работает оператор |> ? Было бы совсем здорово, если бы вы смогли аналог его действий написать на C#.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.08.2019, 09:37
Ответы с готовыми решениями:

растолкуйте
наткнулся на статью http://www.runetpoisk.ru/ и там написано: Это правда или очередная сказка?

Растолкуйте новичку)
Приветствую всех своих будущих коллег! Я студент первого курса, попавший в волну информационных технологий.На данный момент как лодка в...

Растолкуйте код
Помогите с кодом cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? '#' : a) << (j <= M ? "" : "\n"); что делает cout << ( ? :...

39
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
15.08.2019, 13:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от diadiavova Посмотреть сообщение
То есть ты считаешь, что возможность описать аргумент выражением и есть признак того, что функция в данном языке является объектом первого класса?
Признаков объекта первого класса 3: его можно передавать в функцию, его можно возвращать из функции, его можно присваивать переменным.

Цитата Сообщение от diadiavova Посмотреть сообщение
И кстати, насчет square id 3, получил ответ, что ожидался другой тип и это было совсем не то, чего ожидал ты. Есть у тебя какое-то объяснение этому?
Есть предположения, но я не буду их озвучивать. Через оператор конвеера работает и со скобками работает. square func работает, пример кода выше есть. Square может принимать функцию даже без аргументов.

P.S. Дискуссия перешла в бессмысленную демагогию. Если считаешь, что square func это не передача функции как аргумента, то пусть для тебя будет так.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
16.08.2019, 09:17
Цитата Сообщение от Edzard Посмотреть сообщение
Признаков объекта первого класса 3: его можно передавать в функцию, его можно возвращать из функции, его можно присваивать переменным.
Вообще-то нет, но пусть будет так, в конце концов мы ведь твою теорию обсуждаем, так что ты можешь все формулировать как тебе будет угодно. Меня тут, правда, сильно смущает последний пункт, поскольку в чистых функциональных языках вообще нет никаких переменных, ну насколько я знаю, так что получается, что им ты отказываешь в праве обладать функциями, как объектами первого класса. Ну опять-таки ладно, в конце концов мы ведь не обо всех языках говорим, а об одном конкретном.
А можно на конкретном примере увидеть, каким образом ты можешь сохранить в переменную "функцию" id 3 и каким образом ты потом сможешь отличить ее от другой переменной, в которой сохранишь просто 3? Говоря о возможности отличить, я имею в виду тот случай, когда ты не имеешь доступа к исходному коду, который эту переменную инициирует. И насчет возвращения этой же функции id 3 у меня тот же вопрос: есть ли какой-то способ определить, что функция возвратила именно id 3, а не просто тройку, которая получается в результате выполнения этого выражения? И чем возможности языка F# в отношении этой "функции" отличаются от возможностей других языков, в которых функции не являются объектами первого класса?
Цитата Сообщение от Edzard Посмотреть сообщение
Есть предположения, но я не буду их озвучивать.
В смысле "знаю, но не скажу"? Ну это какой-то странный ответ. Изначально на этом примере твоя теория строилась, ты рассказывал об аппликативном порядке вычислений, в пылу спора возмущенно вопрошал: "с каких пор функции стали принимать аргументы справа налево?". Даже разъяснял работу интерпретатора "Пока интерпретатор не дойдет до дна, он не может начать выполнять функцию, он так устроен.". А теперь, когда выяснилось, что все это не соответствует действительности, объяснение ты решил не озвучивать. Тогда у меня вопрос: а это что вообще было-то?
Цитата Сообщение от Edzard Посмотреть сообщение
Через оператор конвеера работает и со скобками работает.
Да, именно потому, что в обоих случаях сначала аргумент вычисляется, а потом в функцию предается результат вычисления, а результатом является число, а не функции. То есть происходит именно то, о чем я говорил с самого начала.
Цитата Сообщение от Edzard Посмотреть сообщение
square func работает, пример кода выше есть.
С чего ты взял, что это функция? Курсор наведи на func - убедишься, что его тип - int, а в определении типа функции должны быть стрелочки.
Цитата Сообщение от Edzard Посмотреть сообщение
Square может принимать функцию даже без аргументов.
Ааааа, так вот что такое func. Ну-ну.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
16.08.2019, 15:17
Цитата Сообщение от diadiavova Посмотреть сообщение
Вообще-то нет, но пусть будет так, в конце концов мы ведь твою теорию обсуждаем, так что ты можешь все формулировать как тебе будет угодно. Меня тут, правда, сильно смущает последний пункт, поскольку в чистых функциональных языках вообще нет никаких переменных, ну насколько я знаю, так что получается, что им ты отказываешь в праве обладать функциями, как объектами первого класса. Ну опять-таки ладно, в конце концов мы ведь не обо всех языках говорим, а об одном конкретном.
А можно на конкретном примере увидеть, каким образом ты можешь сохранить в переменную "функцию" id 3 и каким образом ты потом сможешь отличить ее от другой переменной, в которой сохранишь просто 3? Говоря о возможности отличить, я имею в виду тот случай, когда ты не имеешь доступа к исходному коду, который эту переменную инициирует. И насчет возвращения этой же функции id 3 у меня тот же вопрос: есть ли какой-то способ определить, что функция возвратила именно id 3, а не просто тройку, которая получается в результате выполнения этого выражения? И чем возможности языка F# в отношении этой "функции" отличаются от возможностей других языков, в которых функции не являются объектами первого класса?
Мне не нравится пренебрежительно снисходительный тон! Мы не на экзамене, где я студент, и вообще отвечать не обязан. Так что, если хочется побеседовать, то попрошу сменить манеру общения.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
17.08.2019, 16:30
Цитата Сообщение от Edzard Посмотреть сообщение
Мне не нравится пренебрежительно снисходительный тон!
Если ты в моих постах найдешь места, содержащие оскорбление, переход на личности или сколь-нибудь нелестную характеристику твоих аргументов (ну например, где я назвал бы их демагогией или что-то в этом роде ), то я готов извиниться, но извиняться за "тон", которым я набираю текст на клавиатуре, я все-таки считаю излишним.
Цитата Сообщение от Edzard Посмотреть сообщение
Мы не на экзамене, где я студент, и вообще отвечать не обязан.
Ты в принципе ничего делать здесь не обязан, но уж коль скоро ты ввязался в дискуссию, то вполне закономерно, что твой оппонент в определенных ситуациях ожидает от тебя определенных действий. Ну например: если ты выстроил свою точку зрения на основании какого-либо утверждения, а тебе в ответ доказали, что это утверждение ложно, то вполне закономерно, что от тебя ожидают либо признания того, что ты был неправ, либо, как минимум, внятного объяснения того, почему из ложности первоначального утверждения по твоему мнению не вытекает ложность всей теории. А когда ты на это отвечаешь, что у тебя объяснение есть, но озвучивать его ты не будешь, то какой реакции ты ждешь?
Что касается процитированного тобой фрагмента моего поста, то вопросы там вообще вполне закономерны и сформулированы в предельно деликатной манере типа "а можно пример?" и т.д.
Если тебе нечего ответить, то ты вполне можешь не отвечать ничего или признать что был неправ, но ты почему-то предпочитаешь строить из себя оскорбленную невинность. Да, в конце последнего поста прозвучала нотка иронии, но я почему-то думаю, что ты ее вполне заслужил.
Цитата Сообщение от Edzard Посмотреть сообщение
Так что, если хочется побеседовать, то попрошу сменить манеру общения.
Просто у меня бывает такое настроение, когда меня легко втянуть в спор, а так заканчивать надо было уже давно.
Удачи.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
19.08.2019, 09:38
diadiavova, Композиция функций
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.08.2019, 22:44
Цитата Сообщение от Edzard Посмотреть сообщение
В square передается функция.
В square передается значение, а не функция. func в данном случае значение (и как оно обозвано неважно). Соответственно все последующие утверждения неверны.
А интерпретатор редуцирует ее до выражения.
Нет такого понятия как "интерпретатор" в контексте F#. Есть только компилятор. Он ничего не редуцирует - он может построить код для вычисления значения функции, если ей будут переданы аргументы. А может и не построить, в зависимости от требований в коде.
Цитата Сообщение от Edzard Посмотреть сообщение
Композиция функций
здесь вообще не при делах. в теме нет ни одного примера кода где была бы композиция.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
19.08.2019, 23:17
Цитата Сообщение от pycture Посмотреть сообщение
в теме нет ни одного примера кода где была бы композиция.
А это что? square(id 5)

Цитата Сообщение от pycture Посмотреть сообщение
Нет такого понятия как "интерпретатор" в контексте F#.
Вообще-то есть, у виртуальной машины есть исполнитель. Но разговор был не об этом, а том, что функция в любом случае редуцируется до выражения, а выражение до конечного результата. Так устроены многие функциональные языки. Может в F# и по-другому.

Цитата Сообщение от pycture Посмотреть сообщение
В square передается значение, а не функция.
Не понимаю откуда такой вывод. Если имеется ввиду, что транслятор получает значение, то это не важно, я лично передаю функцию. И могу передать много вложенных функций, хоть так square(f(f(f(f(f()))))).
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
19.08.2019, 23:51
Цитата Сообщение от Edzard Посмотреть сообщение
А это что? square (id 5)
Это применение функции square к результату применения функции id к числу 5. Никакой композиции тут нет, обычный вложенный вызов, как в любом языке.

Цитата Сообщение от Edzard Посмотреть сообщение
я лично передаю функцию.
Нет.

Цитата Сообщение от Edzard Посмотреть сообщение
что функция в любом случае редуцируется до выражения
Угу, ты же сам писал:
Цитата Сообщение от Edzard Посмотреть сообщение
В F# аппликативный порядок вычислений, поэтому сначала вычисляются аргументы, а выражение до конечного результата.
Пойди и прочитай ещё раз о том, что такое аппликативный порядок.

Если всё равно непонятно: то сначала редуцируется и вычисляется (id 5), а потом результат (число 5, а никакая не функция) передаётся в square.

Передача функции как значения происходит например, в map. Или filter. Сотни их, функций высшего порядка.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
20.08.2019, 00:01
Цитата Сообщение от korvin_ Посмотреть сообщение
Это применение функции square к результату применения функции id к числу 5. Никакой композиции тут нет, обычный вложенный вызов, как в любом языке.
А вот и нет. Композиция это как раз примениение функции к результату другой функции. https://ru.wikipedia.org/wiki/Композиция_функций

Цитата Сообщение от korvin_ Посмотреть сообщение
Нет.
Да.

Цитата Сообщение от korvin_ Посмотреть сообщение
Если всё равно непонятно: то сначала редуцируется и вычисляется (id 5), а потом результат (число 5, а никакая не функция) передаётся в square.
Я сам об этом писал выше. Но разницы нет что там вычисляет транслятор, он любую функцию редукцирует, не только переданную. Какое это вообще имеет значение? Из-за того что он редуцирует передача функции перестает быть передачей функции? Что за бред, извините за мой французский. Я передаю функцию, и точка. А что потом будет подстановка значений, меня не волнует, я передаю функцию. Я определил функцию, а потом ее передаю. Всё.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
20.08.2019, 00:12
Цитата Сообщение от korvin_ Посмотреть сообщение
и вычисляется
Поправка: в случае стратегии call-by-value, которая и используется в F#.

Добавлено через 5 минут
Цитата Сообщение от Edzard Посмотреть сообщение
Композиция это как раз примениение функции к результату другой функции.
Нет. Композиция — это операция создания новой функции на основе двух других. Не читай советских газетрукипедию.

In mathematics, function composition is an operation that takes two functions f and g and produces a function h
— https://en.wikipedia.org/wiki/Function_composition

Цитата Сообщение от Edzard Посмотреть сообщение
Да.
Нет.

Цитата Сообщение от Edzard Посмотреть сообщение
Из-за того что он редуцирует передача функции перестает быть передачей функции?
Там нет никакой передачи функции. книжку по Си почитай, про указатели на функции например. Подумай.

Цитата Сообщение от Edzard Посмотреть сообщение
Я передаю функцию
Нет.

Цитата Сообщение от Edzard Посмотреть сообщение
я передаю функцию
Сколько раз не повторяй, всё равно нет, не передаёшь.

Цитата Сообщение от Edzard Посмотреть сообщение
Я определил функцию, а потом ее передаю. Всё.
Нет, ты несёшь бред. Ты уже функцию map посмотрел? Или filter? Пойди SICP почитай, что ли.

Добавлено через 3 минуты
Цитата Сообщение от Edzard Посмотреть сообщение
транслятор
При чём тут транслятор? Ты не понимаешь ни семантику языка, о котором рассуждаешь, ни термины, которыми пытаешься оперировать.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
20.08.2019, 00:16
Цитата Сообщение от korvin_ Посмотреть сообщение
Нет. Композиция — это операция создания новой функции на основе двух других. Не читай советских газетрукипедию.
Где это описано?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
20.08.2019, 00:19
Цитата Сообщение от Edzard Посмотреть сообщение
Где это описано?
Ты слепой? Я тебе цитату привёл и ссылку дал.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
20.08.2019, 00:22
Цитата Сообщение от korvin_ Посмотреть сообщение
Композиция — это операция создания новой функции на основе двух других.
Пример пожалуйста.

Добавлено через 1 минуту
korvin_, g(f(x)) - композиция, в англоязычной статье это написано.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
20.08.2019, 00:24
Вот тебе ещё, более предметная ссылка: https://en.wikipedia.org/wiki/... omposition

Добавлено через 1 минуту
Цитата Сообщение от Edzard Посмотреть сообщение
Пример пожалуйста.
(g ∘ f) — вот это композиция.

Цитата Сообщение от Edzard Посмотреть сообщение
композиция, в англоязычной статье это написано.
Там не это написано.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
20.08.2019, 00:29
Цитата Сообщение от korvin_ Посмотреть сообщение
(g ∘ f) — вот это композиция.
Это применение функции g к результату функции f, g(f(x)) - эквивалентная запись.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
20.08.2019, 00:32
Цитата Сообщение от Edzard Посмотреть сообщение
Это применение функции g к результату функции f
Нет, это примение операции ∘ к функциям f и g.

Цитата Сообщение от Edzard Посмотреть сообщение
g(f(x)) - эквивалентная запись.
Нет. (g ∘ f) и g(f(x)) — не эквивалетные записи.

Посмотри сюда:
1) (g ∘ f) = ?
2) (g ∘ f)(x) = g(f(x))
Подумай.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
20.08.2019, 00:45
Цитата Сообщение от korvin_ Посмотреть сообщение
Нет. (g ∘ f) и g(f(x)) — не эквивалетные записи.
Посмотри сюда:
1) (g ∘ f) = ?
2) (g ∘ f)(x) = g(f(x))
Подумай.
Ой, всё. Пошли манёвры. (g ∘ f) по-русски читается "как применение функции g к результату функции f", то есть так g(f()) или g(f(x)), не важно, это эквиваленты. Я описал выше и так square(id 5) и так square(func), суть не меняется, функция применяется к результату другой функции.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
20.08.2019, 01:07
Цитата Сообщение от Edzard Посмотреть сообщение
Пошли манёвры.


Цитата Сообщение от Edzard Посмотреть сообщение
(g ∘ f) по-русски читается "как применение функции g к результату функции f
Нет.

Цитата Сообщение от Edzard Посмотреть сообщение
g(f())
Такая запись будет иметь эквивалентом запись (f ∘ g)()

Цитата Сообщение от Edzard Посмотреть сообщение
g(f()) или g(f(x)), не важно,
Важно.

Цитата Сообщение от Edzard Посмотреть сообщение
Я описал выше и так square(id 5) и так square(func), суть не меняется, функция применяется к результату другой функции.
И этим результатом является число.

P.S. Ты что, джаваскриптер?
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
20.08.2019, 01:33
Edzard, в самом первом своем посте в этой теме я дал ссылку на официальную документацию по языку, где как раз разъяснялась композиция.
Композиция и конвейеризация функций
Так вот, там прямым текстом написано
Композицией двух функций function1 и function2 является другая функция, которая представляет применение функции function1 с последующим применением функции function2:
И еще
Операторы композиции принимают две функции и возвращают функцию.
В конце любой страницы документации есть возможность отправить отзыв на страницу. Раз ты считаешь, что там написаны глупости, может поделишься с сообществом своими соображениями по этому поводу?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
20.08.2019, 20:35
Цитата Сообщение от Edzard Посмотреть сообщение
А это что? square(id 5)
это передача результата вычисления функции id с аргументом 5, (т.е. значения при аргументе 5), в функцию square, как и в абсолютно любом другом (нефункциональном) языке.
Вообще-то есть, у виртуальной машины есть исполнитель.
нету. и виртуальной машины нету. есть байт-код который компилируется в машинный, а у него 1 исполнитель- CPU
Но разговор был не об этом, а том, что функция в любом случае редуцируется до выражения, а выражение до конечного результата. Так устроены многие функциональные языки.
так устроен только 1 (и еще 1 о котором никто не знает) язык функционального мира, не стоит обобщать то чего несуществует
Может в F# и по-другому.
тогда может сначала надо узнать как, прежде чем доказывать то чего нет?
Не понимаю откуда такой вывод. Если имеется ввиду, что транслятор получает значение, то это не важно, я лично передаю функцию. И могу передать много вложенных функций, хоть так square(f(f(f(f(f())))))
здесь нет передачи функций, есть передача результатов вычислений, т.е. значений. это вообще пример из какогото Си. какое отношение Си имеет к функциональному миру и композиции функций в частности?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2019, 20:35

LGPL растолкуйте
Извините если не там создал тему! Народ подскажите кто нибудь следующее: если я пишу программу на qt используя LGPL версию QTCreator...

Растолкуйте new с адресацией!
Я так понимаю что это для избегания повторного выделения памяти? но до конца так и не понял. Спасибо откликнувшимся. Вот я...

Растолкуйте задание
"Дано натуральное число N . Сколько различных цифр встречается в его десятичной записи? (Цифры числа N сохранить в массиве)." ...

Растолкуйте бсод
Впервые за пол года вылетел бсод, аж интересно почему. Скриншот из BSView: Добавлено через 6 минут Увидел что виноват USB драйвер,...

Растолкуйте с отчетом по БД
В общем выручайие пипец полный.Как грамотно составить отчет по базе данным а именно описание предметной области.тема:Сеть салонов по...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru