Смешение объектно-ориентированного и функционального программирования

Вы не указали определение разделителя до и после сохраненного определения proc:

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

Чтобы переопределить разделитель mysql, используйте разделитель команда. [...] Разделитель изменен на //, чтобы включить полное определение на сервер в качестве одного оператора, а затем восстановить; перед вызовом процедуры. Это позволяет; разделитель, используемый в теле процедуры, который должен быть передан на сервер, а не интерпретируется самим mysql.

blockquote>

Поскольку хранимое определение proc и тело были в порядке, синтаксический чанк дал вам большие пальцы вверх, но код не будет корректно работать на вашем клиенте.

Используйте следующий скелет для определения хранимой процедуры:

delimiter //
create procedure ...
...
end
//
delimiter ;

29
задан Kai 18 June 2009 в 22:55
поделиться

12 ответов

Наиболее известными являются OCaml и F # (которые можно смутно описать как OCaml для .NET).

Есть много других мультипарадигмальных языков, таких как Оз , но они имеют в основном педагогическую ценность. В отличие от OCaml очень практично. Это почти так же быстро, как C и почти так же красиво, как Haskell:)

Популярные языки сценариев, такие как Python и Ruby, позволяют программировать и в функциональном стиле. Однако они не предоставляют одно из самых мощных средств, которые есть у «классических» функциональных языков (а также OCaml): сопоставление с образцом (не путайте его с регулярным выражением).

20
ответ дан Igor Krivokon 18 June 2009 в 22:55
поделиться

JavaScript, Python и Ruby могут быть использованы таким образом, но Scala поднимает ступеньку, набирая функцию статически и работая под JVM.

7
ответ дан Eugene Yokota 18 June 2009 в 22:55
поделиться

Пока вы не настаиваете на «чистоте», Common Lisp поддерживает все ваши потребности.

3
ответ дан Svante 18 June 2009 в 22:55
поделиться

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

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

Одним из них является Haskell . В Haskell вы пишете программы, которые полностью функциональны от начала до конца. Побочные эффекты делегируются структуре данных, называемой IO, а состояние обрабатывается путем передачи его через чистые функции или инкапсуляции в монады. Таким образом, у вас есть «рай отладки», когда только небольшая часть вашего кода взаимодействует с глобальным состоянием, а остальная часть вашей программы чистая, а язык обеспечивает ее чистоту.

3
ответ дан Apocalisp 18 June 2009 в 22:55
поделиться

Хаскелл : Чистый функционал, практически без ОО, но продолжайте, сделайте погружение. : D

Scala : Прекрасное сочетание OO и FP, возможно, превзойдет Java в качестве основного языка в JVM через десятилетие или два. Мне это нравится, потому что оно приносит функциональное программирование в Java. платформа, что-то, что крайне необходимо ИМХО.

C # : Потрясающая поддержка ОО, а также повышение функциональности (уже есть функции первого класса, посмотрим, какие улучшения принесет .net 4)

F # : язык .net Создан специально для работы, в отличие от C #, который изначально был задуман для ООП.

Python : отлично подходит для ОО, но совсем не подходит для FP

Javascript : поддерживает функции первого класса, но не специально разработанный для FP, как Scala и F #. Все еще немного лучше чем питон ИМХО.

Почему вы хотите смешать OO и FP? Как ступенькой?

9
ответ дан Community 18 June 2009 в 22:55
поделиться

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

Это, вероятно, не очень понравится пуристам, но это работает для меня.

7
ответ дан Scott Wisniewski 18 June 2009 в 22:55
поделиться

Насколько мне известно, OCaml и F # являются наиболее популярными языками, которые смешивают ООП и FP.

Большинство языков, таких как Ruby, смешивают функциональное программирование, но многие даже не осознают этого. Я считаю, что такие языки оставляют желать лучшего на синтаксисе и тому подобное.

9
ответ дан Rayne 18 June 2009 в 22:55
поделиться
20
ответ дан Community 18 June 2009 в 22:55
поделиться

Python, javascript, обычный lisp, ruby, smalltalk, haskell и ocaml, с макушки моей головы. Это не совсем экзотическая комбинация.

0
ответ дан Marcin 18 June 2009 в 22:55
поделиться

Кроме того, многие языки сценариев, такие как Python, Ruby, Lua и т. Д., Имеют это возможность, но не хватает многих приятных функций функциональных языков, таких как алгебраические типы данных и сопоставление с образцом.

12
ответ дан Zifre 18 June 2009 в 22:55
поделиться

Рубин! В Ruby все является объектом (даже литералами), а также имеет полную функциональную поддержку программирования.

-1
ответ дан perimosocordiae 18 June 2009 в 22:55
поделиться

Мне интересно, почему вы ищете язык, который специально поощряет смешивание, а не просто делает это с языком, который хорошо работает с функциональным программированием и ОО-программированием? Его можно легко реализовать с помощью Python, Ruby, Perl или аналогичных интерпретируемых языков. Кроме того, ОО-языки на основе С, как правило, смешивают чистый С с ОО-функциями, например, цель C легко может быть написана таким образом, если вы выберете.

РЕДАКТИРОВАТЬ: меня предупредили, что я ошибаюсь, я оставил этот ответ здесь, если кто-то может извлечь уроки из моей ошибки - см. Комментарии.

0
ответ дан Toby 18 June 2009 в 22:55
поделиться
Другие вопросы по тегам:

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