Для корректной работы текстовым редакторам необходим root-доступ

Y-комбинатор - это «функционал» (функция, которая работает с другими функциями), которая обеспечивает рекурсию, когда вы не можете ссылаться на функцию изнутри себя. В теории информатики он обобщает рекурсию , абстрагируя ее реализацию и тем самым отделяя ее от фактической работы рассматриваемой функции. Преимущество отсутствия необходимости во время компиляции для рекурсивной функции является своего рода бонусом. =)

Это применимо к языкам, которые поддерживают лямбда-функции . Характер лямбд на основе выражений обычно означает, что они не могут ссылаться на себя по имени. И обходить это путем объявления переменной, обращения к ней, а затем присвоения ей лямбды, чтобы завершить цикл самоссылки, является хрупким. Лямбда-переменная может быть скопирована, а исходная переменная переназначена, что нарушает самоссылку.

Y-комбинаторы громоздки для реализации и часто используются в статически типизированных языках (которыми часто являются процедурные языки ), потому что обычно ограничения на типирование требуют количества аргументов чтобы рассматриваемая функция была известна во время компиляции. Это означает, что y-комбинатор должен быть записан для любого количества аргументов, которое нужно использовать.

Ниже приведен пример того, как используется и работает Y-Combinator, в C #.

Использование Y-комбинатора предполагает «необычный» способ построения рекурсивной функции. Сначала вы должны написать свою функцию в виде фрагмента кода, который вызывает ранее существующую функцию, а не себя:

// Factorial, if func does the same thing as this bit of code...
x == 0 ? 1: x * func(x - 1);

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

// A function that creates a factorial, but only if you pass in
// a function that does what the inner function is doing.
Func, Func> fact =
  (recurs) =>
    (x) =>
      x == 0 ? 1 : x * recurs(x - 1);

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

// One-argument Y-Combinator.
public static Func Y(Func, Func> F)
{
  return
    t =>  // A function that...
      F(  // Calls the factorial creator, passing in...
        Y(F)  // The result of this same Y-combinator function call...
              // (Here is where the recursion is introduced.)
        )
      (t); // And passes the argument into the work function.
}

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

Это сложно и загадочно, но все встряхивается во время выполнения, и ключом к его работе является «отложенное выполнение» и разбиение рекурсии на две функции. Внутренний F передается в качестве аргумента , который будет вызываться на следующей итерации, только при необходимости .

3
задан 04.05.2020, 10:42

2 ответа

Попробуйте другую среду рабочего стола, так как это, вероятно, ошибка в текущей среде рабочего стола и / или диспетчере окон, которая вызывает проблему - наиболее похожим будет:

] другие возможности могут быть:

Ссылки, которые я дал, содержат советы по установке и настройке.


Для наиболее похожих на Unity, используйте Gnome Версии между 3.4 и 3.8 могут быть лучшими. :

App Overview

Также есть обзор поиска, если что-то лучше, чем у Unity

Если вы также хотите использовать Unity-подобный модуль запуска, используйте Dash to Dock расширение. Другими полезными вещами, делающими его более похожим на Unity, могут быть Dash Hotkeys и, возможно, это .

Расширения иногда совместимы только с разными версиями в Gnome.Shell, вы можете проверять и редактировать вещи с помощью Gnome Tweak Tool

1
ответ дан 04.05.2020, 10:43

Похоже, что папка не принадлежит вашему пользователю, поэтому вы не можете писать в нее - чтобы разобраться в этом, запустите для файла:

sudo chown USERNAME:USERNAME /PATH/TO/FILE

или это для папки / directory:

sudo chown -R USERNAME:USERNAME /PATH/TO/FOLDER

Эти команды сделают пользователя USERNAME и группу USERNAME владельцем указанного файла или папки.

С другой стороны, вы можете просто сделать так, чтобы «Другие» пользователи имели доступ к файлу:

sudo chmod 766 /PATH/TO/FILE

или папке:

sudo chmod -R 766 /PATH/TO/FOLDER

Вот страницы руководства на chmod и chown

Вы можете проверить права доступа к содержимому папки, выполнив:

ls -l /PATH/TO/FOLDER

Вы должны получить что-то вроде этого:

drwxr-xr-x. 2 wilf wilf      4096 Jan 10 15:59 Desktop
drwxr-xr-x. 2 wilf wilf      4096 Jan 10 00:32 Documents
drwxr-xr-x. 3 wilf wilf      4096 Jan 10 18:25 Downloads
-rw-rw-r--. 1 wilf wilf     70582 Jan 11 22:22 gnomeRemove.txt

Где drwxr-xr-x. - это d директория с r ead и e x ecute разрешениями для всех пользователей, с w полномочиями обряда для владельца.

Ваше имя пользователя также должно быть вместо wilf.

1
ответ дан 04.05.2020, 10:43
  • 1
    Я должен сделать это для geany + gedit папки? – Van Uitkon 04.05.2020, 10:43
  • 2
    Походит на ошибку тогда... Вы могли попробовать другой Настольный Enviroment, как XFCE, или Gnome. Don' t знают иначе... – EKS 04.05.2020, 10:44
  • 3
    Проблема isn' t с файлами, проблема с редактором, с большинством его пунктов меню не доступны – Bill 04.05.2020, 10:44
  • 4
    Является единица resposible ошибкой пунктов меню? Поскольку чистка и переустанавливает geany doesn' t помогают там. – Bill 04.05.2020, 10:44
  • 5
    Нет просто папка файлов, что Вы can' t редактирование. – Yudu Ban 04.05.2020, 10:45

Теги

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