Как я могу объяснить, что такое Ubuntu тому, кто никогда не слышал об этом? [закрыто]

Как новичок в комбинаторах, я нашел статью Майка Ваньера (спасибо Николасу Манкузо) очень полезной. Я хотел бы написать резюме, помимо документирования моего понимания, если бы оно могло помочь некоторым другим, я был бы очень рад.

От Crappy до Less Crappy

Используя факториал в качестве примера, мы используем следующую функцию almost-factorial для вычисления факториала числа x:

def almost-factorial f x = if iszero x
                           then 1
                           else * x (f (- x 1))

В приведенном выше псевдокоде almost-factorial принимает функцию f и число x (almost-factorial каррируется, поэтому его можно рассматривать как принимающее функцию f и возвращающее 1-арная функция).

Когда almost-factorial вычисляет факториал для x, он делегирует вычисление факториала для x - 1 функции f и накапливает этот результат с x (в этом случае он умножает результат на (x - 1) с х).

Это можно увидеть как almost-factorial принимает в дрянную версию факториальной функции (которая может рассчитывать только до числа x - 1) и возвращает менее дрянную версию факториал (который вычисляет до числа x). Как в следующем виде:

almost-factorial crappy-f = less-crappy-f

Если мы несколько раз передадим менее дрянную версию факториала в almost-factorial, мы в итоге получим желаемую факториальную функцию f. Где это можно рассматривать как:

almost-factorial f = f

Фиксированная точка

Тот факт, что almost-factorial f = f означает f, является фиксированной точкой функции almost-factorial.

11132 Это был действительно интересный способ увидеть взаимосвязи функций, описанных выше, и это был момент для меня. (пожалуйста, прочитайте пост Майка о фиксированной точке, если у вас его нет)

Три функции

Для обобщения мы имеем нерекурсивную функцию fn (например, наше почти факториальное), у нас есть функция с фиксированной точкой fr (как и у нашего f), тогда что Y делает, когда вы даете Y fn, Y возвращает функция фиксированной точки из fn.

Итак, в итоге (упрощается, если предположить, что fr принимает только один параметр; x вырождается в x - 1, x - 2 ... в рекурсии):

  • Определим вычисления ядра как fn : def fn fr x = ...accumulate x with result from (fr (- x 1)), это почти полезная функция - хотя мы не можем использовать fn напрямую на x, это будет полезно очень скоро. Этот нерекурсивный fn использует функцию fr для вычисления своего результата
  • fn fr = fr, fr является точкой фиксации fn, fr является полезная функция , мы можем использовать fr в x, чтобы получить наш результат
  • Y fn = fr, Y возвращает точка фиксации функции Y превращает нашу почти полезную функцию fn в полезную fr

Вывод Y (не включен)

Я пропущу вывод из Y и пойду к пониманию Y. В сообщении Майка Вайнера много деталей.

Форма Y

Y определяется как (в формате лямбда-исчисления ):

Y f = λs.(f (s s)) λs.(f (s s))

Если мы заменим переменную s слева от функций мы получаем

Y f = λs.(f (s s)) λs.(f (s s))
=> f (λs.(f (s s)) λs.(f (s s)))
=> f (Y f)

Так что действительно, результат (Y f) является точкой фиксации f.

Почему (Y f) работает?

В зависимости от сигнатуры f, (Y f) может быть функцией любой арности, для упрощения предположим, что (Y f) принимает только один параметр, как наш факторная функция.

def fn fr x = accumulate x (fr (- x 1))

начиная с fn fr = fr, мы продолжаем

=> accumulate x (fn fr (- x 1))
=> accumulate x (accumulate (- x 1) (fr (- x 2)))
=> accumulate x (accumulate (- x 1) (accumulate (- x 2) ... (fn fr 1)))

рекурсивное вычисление заканчивается, когда самый внутренний (fn fr 1) является базовым случаем, а fn не использует fr в расчет.

Снова глядя на Y:

fr = Y fn = λs.(fn (s s)) λs.(fn (s s))
=> fn (λs.(fn (s s)) λs.(fn (s s)))

Итак,

fr x = Y fn x = fn (λs.(fn (s s)) λs.(fn (s s))) x

Для меня магическими частями этой установки являются:

  • fn и fr взаимозависимы друг от друга: fr «оборачивает» fn внутри, каждый раз, когда fr используется для вычисления x, он «порождает» («поднимает»?) An fn и делегирует вычисление этому fn (передавая само по себе fr и x); с другой стороны, fn зависит от fr и использует fr для вычисления результата меньшей задачи x-1.
  • В то время, когда fr используется для определения fn (когда fn использует fr в своих операциях), реальное fr еще не определено.
  • Именно fn определяет реальную бизнес-логику. Основываясь на fn, Y создает fr - вспомогательную функцию в определенной форме - для облегчения вычисления для fn рекурсивным способом .

Это помогло мне понять Y таким образом на данный момент, надеюсь, это поможет.

Кстати, я также нашел книгу Введение в функциональное программирование с помощью лямбда-исчисления очень хорошей, я только часть этого и тот факт, что я не мог разобраться Y в книга привела меня к этому посту.

1
задан 04.05.2020, 11:08

1 ответ

незавершенная работа


Введение

Ubuntu - это бесплатная операционная система с открытым исходным кодом. Он основан на Debian и работает под ядром Linux.

Terminal

Одним из преимуществ использования Debian является то, что у вас есть доступ к системе apt-get. Это означает, что вы можете легко устанавливать и удалять приложения из командной строки. Эта система одинакова для сервера и рабочего стола.

Если я новичок в Ubuntu, зачем мне изучать некоторые базовые команды, почему бы просто не использовать графический интерфейс?

  • Потому что большинство вещей проще и быстрее сделать через терминал. Такие вещи, как установка и удаление программного обеспечения, это просто sudo apt-get install packagename для установки приложения и удаления просто введите sudo apt-get remove packagename. Выполнение того же в графическом интерфейсе требует больше шагов и занимает больше времени.
  • Не вводите команду, которую не понимаете. Если вы не понимаете этого, вы не знаете, когда что-то идет не так и что может произойти, когда это происходит. Найдите команду, которую хотите использовать, прежде чем вводить ее. Вы можете использовать man command, чтобы узнать, что он делает, например man apt-get.

Если вы предпочитаете управлять программами через графический интерфейс, вместо этого я бы начал с Центра программного обеспечения, более подробную информацию можно найти здесь .

Сервер или рабочий стол?

Каждая версия Ubuntu бывает двух разных типов:

  • Одна версия сервера, которая устанавливается без графического интерфейса пользователя (графический пользовательский интерфейс ). Сервер может работать в любой системе, которая соответствует минимальным системным требованиям.
  • Другая версия - это рабочий стол с графическим интерфейсом и основными необходимыми приложениями. Настольный компьютер Ubuntu предъявляет более высокие минимальные системные требования, чем сервер, поскольку он работает с графическим интерфейсом и поставляется с большим количеством предустановленных приложений.

Подождите, есть также разные версии в зависимости от вашего оборудования.

32-разрядный или 64-разрядный?

Двумя наиболее используемыми являются 32-разрядный и 64-разрядный. но есть и более конкретные версии, такие как версия PPC Power PC и минимальная установка. Они также поставляются как серверная и настольная версия.

  • 64-бит - это тот, который вы должны использовать, если у вас более новый компьютер, это общая рекомендация, потому что он работает для всех новых компьютеры. но если у вас старый компьютер и вы не уверены, поддерживает ли ваш процессор 64-битную версию. Либо найдите свой компьютер и выясните, поддерживает ли он 64-битную версию, либо выберите 32-битную версию.

  • 32-разрядная - эта версия поддерживается всеми компьютерами с платформой x86, то есть всеми целыми и процессорами AMD.

  • PowerPC - версия PPC больше официально не поддерживается и выпускается только энтузиастами, поэтому эта версия может появиться позже, чем 32- битная и 64-битная версия. Нет никакой гарантии, что он будет выпущен вообще.

  • Минимальная установка - Он состоит только из пакетов, необходимых для начала установки, он загружает остальные пакеты во время установки, поэтому требует подключения к Интернету ,

Что такое нормальный выпуск и выпуск LTS?

Существует два типа выпусков, один - долгосрочная поддержка (LTS), которая выпускается каждые 2 года и поддерживается в течение 5 лет. LTS стремится быть стабильным и поэтому не поставляется с новейшим программным обеспечением. Это система, которая желает стабильности и

  • График выпуска LTS можно найти здесь .

Другая версия является нормальной версией, она следует LTS, но поставляется со всем последним программным обеспечением. Это версия для тех, кто хочет новейшее программное обеспечение, но также хочет стабильную систему. Обычный выпуск выпускается каждые 6 месяцев и имеет альфа и бета-версию.

Но альфа и бета нестабильны и должны использоваться, только если вы можете жить со сбоями.

Дополнительную информацию можно найти здесь:

4
ответ дан 04.05.2020, 11:09

Теги

Похожие вопросы