Нечисловые варианты использования для функционального программирования?

Предупреждение: действующее ограничение open_basedir

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

Когда он появляется, это означает, что доступ был запрещен для некоторых файлов.

Само предупреждение ничего не нарушает, но чаще всего скрипт не работает должным образом, если предотвращается доступ к файлу.

Исправление обычно изменяет конфигурацию PHP , связанная настройка называется open_basedir .

Иногда неправильный имена файлов или каталогов, тогда исправление должно использовать правильные.

Вопросы, относящиеся

25
задан pad 21 June 2012 в 19:53
поделиться

18 ответов

Моя компания попросила, чтобы я записал пользовательское приложение что разрешенные пользователи для выполнения специальных запросов против базы данных на основе плоских файлов. Пользователи этого приложения были Вашими типичными типами Joe Businessman. Они не программисты и его маловероятное, они когда-либо видели SQL-оператор в своих жизнях.

В результате для меня определили задачу для разработки дружественного userinterface, который позволит пользователям выбирать столбцы, таблицы, условия, и т.д. создавать запрос. Это сложно, потому что я могу представить SQL-оператор в UI без первого создания абстрактного представления его в памяти.

первое повторение было записано в C#. Я создал полную нагрузку лодки классы для представления абстрактного синтаксиса SQL-оператора, который привел к действительно громоздкой объектной модели:

  • класс Соединения, класс
  • набора Соединений класс WhereClause, класс
  • набора WhereClauses класс SelectedColumn, класс
  • набора SelectedColumns класс OrderBy, класс
  • наборов набора OrderBy класс SqlStatement, который сгруппировал все aforemtioned классы вместе

Преобразование экземпляра SqlStatement к строке, был великолепно болезненным, ужасным, и ошибочным. Перемещение oppositive направления, от строки до SqlStatement, было еще хуже, поскольку это разбило части строки SQL с помощью большого количества regex и обработки строк.

я взломал вместе систему, произвел приложение, которое работало, но я не был очень доволен ею. Я особенно не был, происходят, когда бизнес-требования приложения, измененного на мне, который вынудил меня пересмотреть свой код C#.

Так же, как эксперимент, я переписал свой SqlStatement в F# и представил его как объединение:


type dir = Asc | Desc
type op = Eq | Gt | Gte | Lt | Lte
type join = Inner | Left | Right

type sqlStatement =
    | SelectedColumns of string list
    | Joins of (string * join) list
    | Wheres of (string * op * string) list
    | OrderBys of (string * dir) list

type query = SelectedColumns * Joins * Wheres * OrderBys

, Что небольшое количество кода заменило несколько сотен строк C# и приблизительно дюжину классов. Что еще более важно, сопоставление с образцом упростило процесс, требуемый преобразовать абстрактное представление в строку SQL.

забавная часть преобразовывала строку SQL назад в объект запроса, использующий fslex/fsyacc.

, Если я помню правильно, исходный код C# составил 600 строк и приблизительно дюжину классов, много грязных regex и requied два дня, чтобы записать и протестировать. Для сравнения код F# состоял из одного .fs файла приблизительно 40 строк, приблизительно 100 строк для реализации лексического анализатора/синтаксического анализатора, и использовал несколько часов из моего дня для тестирования.

Серьезно, пишущий эту часть приложения в F# испытывал желание обманывать, это - то, как тривиально легкий это было.

46
ответ дан Juliet 28 November 2019 в 17:45
поделиться

LINQ берет много сигналов от функционального программирования. Взгляд на то, как произвольный поставщик LINQ реализован, мог бы предоставить Вам некоторое практическое понимание.

0
ответ дан Gabriel Isenberg 28 November 2019 в 17:45
поделиться

Лучший определенный пример, который я могу дать, StringTemplate, используемый механизм шаблонной обработки (среди многих других мест) в парсере-генераторе ANTLR.

В одной статье о проектировании и разработке StringTemplate, Terence Parr записал, что первоначально скептически относился к функциональному программированию, и так смеялся вслух над собой, когда он понял, что StringTemplate был по существу функциональным языком для генерации текста.

1
ответ дан joel.neely 28 November 2019 в 17:45
поделиться

Устранение разрыва алгоритма: линейно-разовая функциональная программа для форматирования абзаца (1997)
Oege De Moor, Jeremy Gibbons
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.7923

Структурирующие Графические Парадигмы в TkGofer (1997) Koen Claessen, Тонна Vullinghs, Erik Meijer http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.5525

офис Моделирования обрабатывает с функциональными синтаксическими анализаторами (1994) Gert Florijn
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.19.1307

1
ответ дан ja. 28 November 2019 в 17:45
поделиться

Проверьте" Чисто функциональные структуры данных " (и вот диссертация, которая вдохновила книгу).

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

Правовая оговорка: я вытягиваю Atwood здесь, я едва считал несколько обзоров книги и скользил по тезису, это находится в моем списке toread.

1
ответ дан Vinko Vrsalovic 28 November 2019 в 17:45
поделиться

Сопоставление с образцом является также местом, где функциональное программирование сияет, делая его действительно полезным в областях, таких как Биоинформатика.

Однако данный большие компиляторы мы имеем сегодня, сияния функционального программирования почти везде.

1
ответ дан Mehrdad Afshari 28 November 2019 в 17:45
поделиться

Чем больше я использую функциональный стиль, тем лучше мне нравится он. Рассмотрите этот фрагмент Python от другой вопрос :

>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]

Это - по общему признанию более или менее математическая формулировка, но существует партии из генераторов в Python. Как только Вы привыкаете к нему, использование понимания списка вместо цикла и легко понять, и менее вероятно иметь ошибку (Вы не добираетесь "прочь" ошибками.)

3
ответ дан Community 28 November 2019 в 17:45
поделиться

"Начало работы с Erlang" имеет обширный клиент-серверный пример (запускающийся в Разделе 1.3.5), который может удовлетворить Вашим потребностям.

3
ответ дан Chris Conway 28 November 2019 в 17:45
поделиться

Выезд обработка текста в Python . Книга начинается с некоторыми простыми, но хорошо мотивированными примерами, где методы функционального программирования делают код легче читать и более вероятно быть корректными.

3
ответ дан John D. Cook 28 November 2019 в 17:45
поделиться

Вы могли бы интересоваться слушанием этого эпизода Радио Разработки программного обеспечения с создателем Erlang, который разработал его при работе на Ericsson.

http://www.se-radio.net/podcast/2008-03/episode-89-joe-armstrong-erlang

5
ответ дан BobbyShaftoe 28 November 2019 в 17:45
поделиться

Функциональное программирование является парадигмой как процедурное/структурированное, объектно-ориентированное, и универсальное/обработанное по шаблону программирование. Это полно Тьюрингом, таким образом, можно сделать что-либо, что Вы хотите.

Кроме математики и науки, это, облегчает для синтаксического анализатора combinators, искусственной аналитики, параллелизма, динамической оценки, сопрограмм, продолжений, краткая нотация (быстрее brain-to-keyboard-to-text-file цикл и меньше кода для поддержания), parametization со строгим контролем типов (см. алгебраические типы Haskell), и динамическая саморефлексия (например, минималистические метакруговые интерпретаторы с REPL).

7
ответ дан Mark Cidade 28 November 2019 в 17:45
поделиться
10
ответ дан Diomidis Spinellis 28 November 2019 в 17:45
поделиться

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

Школа Haskell Выражения является книгой новичка о Haskell, который использует мультимедиа в качестве его механизма для обучения.

реальный мир Haskell действительно не имеет никакого конкретного механизма всюду по всей книге, но существует несколько покрытий глав, пишущий "реальные" программы в функциональном стиле.

2
ответ дан Magnus 28 November 2019 в 17:45
поделиться

Есть еще один для вас:

Я участвую на самых ранних этапах создания прототипа набора новых финансовых продуктов корпоративного масштаба, предназначенных для малых и средних банков, местных правительство, фондовые биржи и т.д. Вы, вероятно, думаете: «О, финансовый кодекс, вы, должно быть, много занимаетесь математикой» - на самом деле, нет. Эти продукты имеют широкие возможности настройки и позволяют пользователям вводить бизнес-правила в стратегические точки приложения.

Мы используем F # для представления и интерпретации бизнес-правил. Чтобы использовать наивный пример, давайте напишем код для обработки чеков, мы могли бы написать такие правила:

type condition =
    | Test of string
    | And of condition * condition
    | Or of condition * condition
    | Not of condition

type transactionWorkflow =
    | Reject
    | Approve
    | AdministratorOverride of string
    | If of condition * transactionWorkflow list
         (* condition,  true condition *)
    | IfElse of condition * transactionWorkflow list * transactionWorkflow list
         (* condition,      true condition,            false condition *)
    | AttachForms of string list

Используя специальное приложение, пользователи могут написать некоторые бизнес-правила, представленные структурой выше. Например:

let checkProcessingWorkflow =
    [If(Test("account doesn't exist")
        ,[AdministratorOverride("Account doesn't exist. Continue?");
          AttachForms ["40808A - Null Account Deposit"]]
       );
     If(Test("deposit > 10000")
        ,[
            If(And(Test("account created within 3 months")
                   ,Test("out of country check"))
               ,[Reject]);
            IfElse(Test("account state = TX")
                    ,[AttachForms ["16A"; "16B"]]
                    ,[AttachForms ["1018"]]
                 )
         ]
       );
     Approve
    ]

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

Конечно, все вышеперечисленное - всего лишь концептуальный код, и мы все еще находимся на очень ранних стадиях даже прототипирование одной из наших систем правил. Мы используем F #, а не Java или C # по одной конкретной причине: сопоставление с образцом.

5
ответ дан 28 November 2019 в 17:45
поделиться

Ted Neward wrote a 10 part article on Scala, aimed at Java programmers, and the series finished off with writing a DSL in Scala. This particular DSL is actually a numeric calculator, but that's not what's interesting about it, it's the way the DSL can be easily assembled in a functional language

Part1

Part2

Part3

1
ответ дан 28 November 2019 в 17:45
поделиться

для тех, кто считает LISP функциональным языком программирования, существует http-сервер, написанный на общем Lisp, представленный в статье 1994 года и все еще разрабатываемый в 2006 году:

для более современных материалов, вы можете спросить google "haskell web server", вы, вероятно, найдете несколько интересных примеров. один из них заставил меня найти этот сайт: http://code.haskell.org/ .

1
ответ дан 28 November 2019 в 17:45
поделиться

В наши дни я даже не стал бы думать о написании лексера / парсера DSL на нефункциональном языке (в широком смысле этого слова). ADT и сопоставление с образцом делают это намного проще.

2
ответ дан 28 November 2019 в 17:45
поделиться

Действительно интересный вопрос, потому что я думал, что я единственный автор, пишущий книги по функциональному программированию для численного анализа!

Функциональное программирование исторически гораздо чаще используется для метапрограммирования, то есть для написания программ, которые манипулируют другими программами. Сюда входят интерпретаторы и компиляторы (например, для DSL), а также более эзотерические приложения, такие как доказательство теорем (Coq, Isabelle) и системы перезаписи терминов (например, системы компьютерной алгебры, такие как Mathematica). Языки семейства Meta Language (ML) были специально разработаны для этого.

2
ответ дан 28 November 2019 в 17:45
поделиться
Другие вопросы по тегам:

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