Вопросы с тегом «functional-programming»

Функциональное программирование - это парадигма программирования, основанная на построении абстракций с использованием функций, избегая побочных эффектов и изменения состояния. Чистое функциональное программирование является поточно-ориентированным.

10
Могу ли я объединить в Scala более двух списков?
Учитывая следующий список Scala: val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3")) Как я могу получить: List(("a1", "a2", "a3"), ("b1", "b2", "b3"), ("c1", "c2", "c3")) Поскольку zip можно использовать только для объединения двух списков, я думаю, вам нужно как-то перебрать / уменьшить основной список. Неудивительно, что …

5
реализация вывода типа
Я вижу здесь несколько интересных дискуссий о статической и динамической типизации. Обычно я предпочитаю статическую типизацию из-за проверки типа компиляции, лучшего документированного кода и т. Д. Однако я согласен с тем, что они действительно загромождают код, например, так, как это делает Java. Итак, я собираюсь начать создавать собственный язык функционального …

5
Почему я не могу сопоставить целые числа со строками при потоковой передаче из массива?
Этот код работает (взят из Javadoc): List<Integer> numbers = Arrays.asList(1, 2, 3, 4); String commaSeparatedNumbers = numbers.stream() .map(i -> i.toString()) .collect(Collectors.joining(", ")); Этот не может быть скомпилирован: int[] numbers = {1, 2, 3, 4}; String commaSeparatedNumbers = Arrays.stream(numbers) .map((Integer i) -> i.toString()) .collect(Collectors.joining(", ")); IDEA сообщает мне, что у меня …

1
Объяснение комбинаторов для рабочего человека
Что такое комбинатор ?? Это «функция или определение без свободных переменных» (как определено в SO)? Или как насчет этого: согласно Джону Хьюзу в его известной статье о стрелах, «комбинатор - это функция, которая строит фрагменты программы из фрагментов программы» , что выгодно, потому что «... программист, использующий комбинаторы, создает большую …

3
Упорядочивание параметров для использования каррирования
Я дважды недавно реорганизовал код, чтобы изменить порядок параметров, потому что было слишком много кода, где хаки вроде flipили \x -> foo bar x 42происходили. Какие принципы помогут мне лучше всего использовать каррирование при разработке сигнатуры функции?

4
Как мне написать функцию, которая возвращает другую функцию?
В Python я хотел бы написать функцию, make_cylinder_volume(r)которая возвращает другую функцию. Эта возвращенная функция должна быть вызвана с параметром hи возвращать объем цилиндра с высотой hи радиусом r. Я знаю, как возвращать значения из функций в Python, но как мне вернуть другую функцию ?

6
Почему я могу определять структуры и классы внутри функции на C ++?
Я просто по ошибке сделал что-то подобное на C ++, и это работает. Почему я могу это сделать? int main(int argc, char** argv) { struct MyStruct { int somevalue; }; MyStruct s; s.somevalue = 5; } Теперь, сделав это, я как бы вспомнил, что читал где-то об этом трюке давным-давно, …

9
Как работают языки функционального программирования?
Если языки функционального программирования не могут сохранять какое-либо состояние, как они делают простые вещи, такие как чтение ввода от пользователя? Как они «хранят» ввод (или хранят какие-либо данные в этом отношении?) Например: как эта простая вещь C может быть переведена на функциональный язык программирования, такой как Haskell? #include<stdio.h> int main() …

8
Как / почему функциональные языки (в частности, Erlang) хорошо масштабируются?
Некоторое время я наблюдал за растущей популярностью языков и функций функционального программирования. Я заглянул в них и не увидел причины обращения. Затем, недавно я посетил презентацию Кевина Смита «Основы Erlang» на Codemash . Мне понравилась презентация, и я узнал, что многие атрибуты функционального программирования позволяют намного легче избежать проблем с …

5
Выполняет ли Ruby оптимизацию хвостового вызова?
Функциональные языки приводят к использованию рекурсии для решения множества проблем, поэтому многие из них выполняют оптимизацию хвостового вызова (TCO). TCO вызывает вызовы функции из другой функции (или самой функции, в этом случае эта функция также известна как Tail Recursion Elimination, которая является подмножеством TCO) в качестве последнего шага этой функции, …

6
Что такое полиморфизм в Javascript?
Я прочитал возможную статью о полиморфизме, которую смог найти в Интернете . Но я думаю, что не мог полностью понять значение этого и его важность. В большинстве статей не говорится, почему это важно и как добиться полиморфного поведения в ООП (конечно, в JavaScript). Я не могу привести пример кода, потому …

1
Как заархивировать списки в список
Я хочу заархивировать следующий список списков: >>> zip([[1,2], [3,4], [5,6]]) [[1,3,5], [2,4,6]] Этого можно достичь с помощью текущей zipреализации, только если список разделен на отдельные компоненты: >>> zip([1,2], [3,4], [5,6]) (1, 3, 5), (2, 4, 6)] Не могу понять, как разбить список и передать отдельные элементы zip. Функциональное решение предпочтительнее.

6
Оптимизированы ли какие-либо хвостовые вызовы движков JavaScript (TCO)?
У меня есть хвостовой рекурсивный алгоритм поиска пути, который я реализовал в JavaScript, и я хотел бы знать, могут ли какие-либо (все?) Браузеры получить исключения переполнения стека.

15
Напишите интерпретатор Haskell на Haskell
Классическим упражнением в программировании является написание интерпретатора Lisp / Scheme на Lisp / Scheme. Возможности полного языка можно использовать для создания интерпретатора для подмножества языка. Есть ли подобное упражнение для Haskell? Я хотел бы реализовать подмножество Haskell, используя Haskell в качестве движка. Конечно, это можно сделать, но есть ли какие-нибудь …

8
Удаление элементов с помощью Array.map в JavaScript
Я хотел бы отфильтровать массив элементов с помощью map()функции. Вот фрагмент кода: var filteredItems = items.map(function(item) { if( ...some condition... ) { return item; } }); Проблема в том, что отфильтрованные элементы по-прежнему используют пространство в массиве, и я хотел бы полностью их стереть. Любая идея? РЕДАКТИРОВАТЬ: Спасибо, я забыл …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.