Pull to refresh

10 «однострочников», которые произведут впечатление на ваших друзей

Reading time 13 min
Views 42K
За последнюю неделю появилось несколько топиков с названием «10 однострочников на <MY_LANGUAGE>, которые произведут впечатление на ваших друзей», которые содержат однострочное решение нескольких простых задач, демонстрирующее достоинства и «крутость» любимого языка программирования автора. Я решил перевести их и для сравнения собрать в одном топике. Вся волна началась (вроде как) со Scala.
Итак, поехали!


Scala


Это 10 однострочников, демонстрирующих мощь языка Scala, чтобы произвести впечатление на ваших друзей и, может быть, даже женщин :). К тому же они являются отличными примерами использования функционального программирования и синтаксиса языка Scala, с которым вы, возможно, не знакомы. Я думаю, что нет лучшего способа изучить его, чем увидеть реальные примеры.
  1. Удваиваем каждый элемент списка

    Функция map берёт каждый элемент списка и применяет к нему соответствующую функцию. В данном примере, мы берём каждый элемент и умножаем его на 2. В результате будет возвращён список такого-же размера в отличии от других примеров, использующих функции reduceLeft и foldLeft, которые возвращают только одно не списковое значение.
    (1 to 10) map { _ * 2 }
    В комментария к оригинальной статье также был предложен вариант:
    (1 to 10) map (2*)

  2. Суммируем все числа в списке

    Наиболее распространенным примером использования reduceLeft является суммирование чисел в списке. В этом примере суммируются числа от 1 до 1000 с использованием функций диапазона to для создания нашей последовательности чисел и reduceLeft для итерации и суммирования.
    (1 to 1000).reduceLeft( _ + _ )
    В комментариях к оригинальной статье был предложен лучший вариант:
    (1 to 1000).sum

  3. Проверяем вхождение подстроки

    Этот пример возвращает булево значение если слово из списка входит в указанную строку. Я использовал этот пример для проверки того, что твит содержит интересующее меня слово. Да, технически это три строки, но первые две — это просто задание переменных.
    val wordlist = List("scala", "akka", "play framework", "sbt", "typesafe")
    val tweet = "This is an example tweet talking about scala and sbt."
    
    (words.foldLeft(false)( _ || tweet.contains(_) ))
    В комментариях к оригинальной статье был предложен лучший вариант:
    ...
    wordList.exists(tweet.contains(_))

  4. Чтение из файла

    Этот пример может быть впечатляющим на фоне Java, это довольно общий пример чтения файла одной строкой. На самом деле здесь два примера: один читает весь файл в строку, другой считывает файл построчно в список.
    val fileText = io.Source.fromFile("data.txt").mkString
    
    val fileLines = io.Source.fromFile("data.txt").getLines.toList

  5. С днём рожденья!

    Однострочник, который выводит песенку «Hapy Birthday». Он иллюстрирует тернарный оператор Scala, а также сочетание map и foreach.
    (1 to 4).map { i => "Happy Birthday " + (if (i == 3) "dear NAME" else "to You") }.foreach { println }

  6. Фильтрация списка чисел

    Фильтрация списка чисел на две категории, основанные на использовании partition. В этом примере создаются два списка студентов по результатам их тестирования.
    val (passed, failed) = List(49, 58, 76, 82, 88, 90) partition ( _ > 60 )

  7. Получение и разбор XML от веб-сервиса

    Так как XML является нативной структурой Scala, разбор XML происходит без каких-либо усилий. Вот пример извлечения фида поиска Twitter.
    val results = XML.load("http://search.twitter.com/search.atom?&q=scala")

  8. Поиск минимума (или максимума) в списке

    Ещё пара примеров использования reduceLeft для перебора списка и применения функции.
    List(14, 35, -7, 46, 98).reduceLeft ( _ min _ )
    List(14, 35, -7, 46, 98).reduceLeft ( _ max _ )
    В комментариях к оригинальной статье был предложен лучший вариант:
    List(14, 35, -7, 46, 98).min
    List(14, 35, -7, 46, 98).max

  9. Параллельная обработка

    В Scala 2.9 был представлен новый тип коллекции под названием «параллельные коллекции», использующие многоядерные процессоры при выполнении массовых операций, таких как foreach, map, filter и т.д… Вот видео от Александра Прокопец о параллельных коллекциях на Scala Days 2010.

    Этот пример иллюстрирует использование параллельных коллекций. Представьте, что у вас есть множество данных, определенных в списке dataList и функция processItem, очень интенсивно использующая процессор. Следующий однострочник даёт вам параллельную обработку списка.
    val result = dataList.par.map(line => processItem(line))
    

  10. Решето Эратосфена

    Хорошо, на этот раз пример не совсем практический и, технически, не однострочный, поскольку он опирается на оператор, определённый ранее, но он всё-равно чертовски клёвый, пусть даже не читаемый. Даниэль Собрал написал реализацию алгоритма Решето Эратосфена, который используется для того, чтобы определить, является ли число простым.
    (n: Int) => (2 to n) |> (r => r.foldLeft(r.toSet)((ps, x) => if (ps(x)) ps -- (x * x to n by x) else ps))
    Требует определения оператора |>, синтаксис которого заимствован из F#. Смотрите, например, в блоге Стива Гилхэма.
Оригинальный пост: «10 Scala One Liners to Impress Your Friends»
Автор: Marcus Kazmierczak



CoffeScript


Вы, возможно читали пост "10 однострочников на Scala, чтобы произвести впечатление на ваших друзей" в блоге Marcus Kazmierczak, недавно размещенный на HN. Хоть я и не знаю Scala (или Java), но это выглядит отлично, поэтому я тоже решил произвести впечатление на моих друзей — некоторые переходят с Java на Scala, мы идем из Javascript в CoffeeScript. Будем использовать node.js как среду для запуска всех примеров.

  1. Удваивание всех элементов в списке

    Маркус начинает хвастаться с функции map. Мы можем сделать то же самое с использованием range и анонимной функции:
    [1..10].map (i) -> i*2
    но можно написать и в более выразительном виде
    i * 2 for i in [1..10]

  2. Сумма списка чисел

    Javascript (и CoffeeScript в качестве его расширения) также имеют встроенные функции map и reduce:
    [1..1000].reduce (t, s) -> t + s
    (reduce == reduceLeft, reduceRight также доступен)

  3. Проверка вхождения подстроки

    Очень легко, так как у нас есть метод some. Он возвращает истину, если любому из элементов массива удовлетворяет функция:
    wordList = ["coffeescript", "eko", "play framework", "and stuff", "falsy"]
    tweet = "This is an example tweet talking about javascript and stuff."
    
    wordList.some (word) -> ~tweet.indexOf word
    А вот это вернёт соответствующие слова:
    wordList.filter (word) -> ~tweet.indexOf word
    "~" — это не специальный оператор в CoffeeScript, а просто грязный трюк. Это побитовый оператор «НЕ», который инвертирует биты своего операнда. На практике это приравнивается к -x-1. Здесь он работает на основе того, что мы хотим сделать проверку для индекса больше, чем -1, и -(-1)-1 == 0 оценивается как ложь.

  4. Чтение файла

    Пользователи клиентского JavaScript уже знакомы с этой идеей:
    fs.readFile 'data.txt', (err, data) -> fileText = data
    Ещё можно использовать синхронную версию:
    fileText = fs.readFileSync('data.txt').toString()
    Но в node.js это приемлемо только для процедуры запуска приложений. Вы должны использовать асинхронную версию в вашем коде.

  5. С днём рожденья

    Во-первых, можно отобразить Scala-версию один в один:
    [1..4].map (i) -> console.log "Happy Birthday " + (if i is 3 then "dear Robert" else "to You")
    Но можно и лучше. Это читается почти как псевдо-код:
    console.log "Happy Birthday #{if i is 3 then "dear Robert" else "to You"}" for i in [1..4]

  6. Фильтрация списка чисел

    Фильтрация списка чисел получилась достаточно похожей:
    passed = []
    failed = []
    (if score > 60 then passed else failed).push score for score in [49, 58, 76, 82, 88, 90]
    (Можно ещё использовать filter, но тогда не получится однострочника)

  7. Получение и разбор XML от веб-сервиса

    XML-что? Не слышал о таком. Давайте вместо этого получим JSON:
    request.get { uri:'path/to/api.json', json: true }, (err, r, body) -> results = body

  8. Поиск минимума (или максимума) в списке

    Здесь удобна функция apply. Она позволяет вызывать функцию, передавая массив как список аргументов: Math.max и Math.min получают переменное число аргументов, т.е. Math.max 30, 10, 20 возвращает 30. Попробуем поработать с массивом:
    Math.max.apply @, [14, 35, -7, 46, 98] # 98
    Math.min.apply @, [14, 35, -7, 46, 98] # -7

  9. Параллельная обработка

    Пока что не существует. Вы можете создавать дочерние процессы и взаимодействовать с ними, или использовать WebWorkers API. Пропускаем.

  10. Решето Эратосфена

    Не удалось довести это до одной строки. Есть идеи?
    sieve = (num) ->
        numbers = [2..num]
        while ((pos = numbers[0]) * pos) <= num
            delete numbers[i] for n, i in numbers by pos
            numbers.shift()
        numbers.indexOf(num) > -1
    Обновление (5 июня): @dionyziz прислал мне компактную версию:
    primes = []
    primes.push i for i in [2..100] when not (j for j in primes when i % j == 0).length
    которую мы можем использовать для действительно однострочной версии, похожей на оригинал:
    (n) -> (p.push i for i in [2..n] when not (j for j in (p or p=[]) when i%j == 0)[0]) and n in p
    Или несколько более эффективно:
    (n) -> (p.push i for i in [2..n] when !(p or p=[]).some((j) -> i%j is 0)) and n in p

  11. Бонус

    Самая читаемая версия fizzbuzz, которую вы когда-либо видели:
    "#{if i%3 is 0 then 'fizz' else ''}#{if i%5 is 0 then 'buzz' else ''}" or i for i in [1..100]
    Ещё проще, но замудрённей, с небольшой подсказкой от satyr:
    ['fizz' unless i%3] + ['buzz' unless i%5] or i for i in [1..100]
Оригинальный пост: «10 CoffeeScript One Liners to Impress Your Friends
»

Автор: Ricardo Tomasi



F#


В духе of 10 "10 однострочников на Scala, чтобы произвести впечатление на ваших друзей" вот некоторые однострочники на F#:
  1. Удваивание всех чисел в списке

    Тут всё просто, у F# тоже есть map:
    [1 .. 4] |> Seq.map (fun x -> x * x);;

  2. Сумма списка чисел

    Это так же просто, так как у F# есть ещё sum:
    [1 .. 4] |> Seq.sum;;

  3. Проверка вхождения подстроки

    И это просто, ведь у нас есть find:
    ["f#"; "scala"] |> Seq.find(fun w -> "this tweet contains f#".Contains(w));;

  4. Чтение файла (скуууучно!)

    У F# есть все библиотеки. NET. Очень легко прочесть все строки файла как последовательность:
    File.ReadLines(@"file.txt") |> Seq.map(fun l -> l.Length) |> Seq.sum;;

  5. С днём рожденья!

    Тоже скучно… вот так:
    [1 .. 4] |> Seq.map (fun i -> "Happy Birthday " + (if i = 3 then "dear NAME" else "to you")) |> Seq.iter Console.WriteLine;;

  6. Фильтрация (на самом деле, разделение) списков

    С использованием строенной функции partition, мы легко можем разделить список:
    [49; 58; 76; 82; 88; 90] |> List.partition (fun i -> i > 60);;

  7. Получение и парсинг XML

    Опять же, пригодятся библиотеки .NET. К сожалению, это не совсем однострочник в F#. Но Дон Сайм показывает, как это сделать синхронно и асинхронно.

  8. Поиск максимума и минимума в списке

    Для этого в F# сеть строенные функции:
    [49; 58; 76; 82; 88; 90] |> Seq.min;;
    [49; 58; 76; 82; 88; 90] |> Seq.max;;

  9. Параллельная обработка

    Это пример от J Rocha. Предположим, у нас есть метод «isprime», и мы хотим получить количество простых чисел, сгруппированных по их последней цифре, от 1 до 50000. PSeq обрабатывает последовательности параллельно:
    [|1 .. 50000|] |> PSeq.filter isprime |> PSeq.groupBy (fun i -> i % 10) |> PSeq.map (fun (k, vs) -> (k, Seq.length vs)) |> Seq.toArray |> Seq.sort |> Seq.toList;;
Оригинальный пост: «F# One liners to impress your friends»
Автор: Will Fitzgerald



Ruby


Был опубликован список из 10 однострочных примеров, которые призваны показать выразительность Scala. Версия CoffeeScript появились быстро, так что я думал, что опубликовал Ruby-версию один. Я считаю, что синтаксис Ruby немного чище, чем Scala, но в сущности (по крайней мере, насколько показывают эти примеры) относительно аналогичный.
  1. Удвоение всех чисел в списке

    (1..10).map { |n| n * 2 }

  2. Сумма списка чисел

    (1..1000).inject { |sum, n| sum + n }
    Или используя (встроенный) синтаксис Symbol#to_proc, который стал доступен, начиная с версии Ruby 1.8.7:
    (1..1000).inject(&:+)
    Или даже так:
    (1..1000).inject(:+)

  3. Проверка вхождения подстроки

    words = ["scala", "akka", "play framework", "sbt", "typesafe"]
    tweet = "This is an example tweet talking about scala and sbt."
    
    words.any? { |word| tweet.include?(word) }

  4. Чтение файлов

    file_text = File.read("data.txt")
    file_lines = File.readlines("data.txt")
    Последнее включает в себя "\n" в конце каждого элемента массива, который может быть отделён путем добавления .map { |str| str.chop } или с использованием альтернативной версии:
    File.read("data.txt").split(/\n/)

  5. С днём рожденья

    4.times { |n| puts "Happy Birthday #{n==2 ? "dear Tony" : "to You"}" }

  6. Фильтрация списка чисел

    [49, 58, 76, 82, 88, 90].partition { |n| n > 60 }

  7. Получение и разбор XML от веб-сервиса

    require 'open-uri'
    require 'hpricot'
    
    results = Hpricot(open("http://search.twitter.com/search.atom?&q=scala"))
    В этом примере требуются open-uri и hpricot или эквивалентные библиотеки, (вы можно использовать встроенную). Это не слишком много кода, но Скала явно выигрывает здесь.

  8. Поиск минимума (или максимума) в списке

    [14, 35, -7, 46, 98].min
    [14, 35, -7, 46, 98].max

  9. Параллельная обработка

    require 'parallel'
    
    Parallel.map(lots_of_data) do |chunk|
      heavy_computation(chunk)
    end
    В отличие от Scala, поддержка многоядерности не встроена. Этот пример требует parallel или аналогичный gem.

  10. Решето эратосфена

    Однострочник на Scala очень заумный, но совершенно нечитаемый. Простая реализация, требующая более чем одной строки, на Ruby:
    index = 0
    while primes[index]**2 <= primes.last
          prime = primes[index]
          primes = primes.select { |x| x == prime || x % prime != 0 }
          index += 1
    end
    p primes
    Этот пример со StackOverflow.

Оригинальный пост: «10 Ruby One Liners to Impress Your Friends»
Автор: Antonio Cangiano



Clojure


Я увидел интересный пост сегодня под названием "10 однострочников на Scala, чтобы произвести впечатление на ваших друзей", а затем кто-то опубликовал в другом блоге пост под названием "10 однострочников на CoffeeScript, чтобы произвести впечатление на ваших друзей". Эти два поста показывают небольшие задачки (большинство из них имеют тривиальные решения в современных языках программирования), каждая их которых выполнены в примерно 1 строку кода.

Я думаю будем уместно сделать тоже самое для моего любимого языка программирования — Clojure.
  1. Удваивание всех чисел в списке

    (map #(* % 2) (range 1 11))

  2. Сумма списка чисел

    (reduce + (range 1 1001))

  3. Проверка вхождения подстроки

    Я считаю правильным использовать здесь регулярные выражения:
    (def tweet "This is an example tweet talking about clojure and emacs.")
    (def regex (re-pattern (apply str (interpose "|" ["clojure" "logic" "compojure" "emacs" "macros"]))))
    (re-seq regex tweet) ; Возвращает сами совпадения, а не true/false
    Как подсказали комментаторы, эта проблема может быть решена без использования регулярных выражений за счет использования множеств Clojure.
    (def tweet "This is an example tweet talking about clojure and emacs.")
    (def is-word? (set ["clojure" "logic" "compojure" "emacs" "macros"]))
    (not (nil? (some is-word? (.split tweet " ")))) ; Возвращает true/false

  4. Чтение файла

    (def file-text (slurp "data.txt")) ; Читает весь файл
    (def file-lines (clojure.contrib.io/read-lines "data.txt")) ; Читает последовательность строк
    Clojure Contrib будет считаться устаревшим в будущих релизах Clojure, clojure.contrib.io/read-lines можно записать в виде (line-seq (clojure.java.io/reader (clojure.java.io/file “data.txt”))) в Clojure 1.3 и старше. Спасибо Aaron за указание на это.

  5. С днём рожденья

    (doseq [l (map #(str "Happy Birthday " (if (= % 2) "dear Rich" "to You")) (range 4))] (println l))
    Альтернативная версия:
    (dotimes [n 4] (println "Happy Birthday " (if (= n 2) "dear Rich" "to You")))
    

  6. Фильтрация списка чисел

    (partition-by #(> % 60) [49 58 76 82 88 90])

  7. Получение и парсинг XML от веб-сервиса

    (clojure.xml/parse "http://search.twitter.com/search.atom?&q=clojure")

  8. Поиск минимума и максимума в списке

    (reduce max [14 35 -7 46 98])
    (reduce min [14 35 -7 46 98])
    ;; И теперь оба сразу
    ((juxt #(reduce max %) #(reduce min %)) [14 35 -7 46 98]) ; Возвращает [98 -7]

  9. Параллельная обработка

    ;; Предположим, что process-line - это интенсивно использующая процессор функция, оперирующая со строками
    (pmap process-line lines) ; Обратите внимание на "p" перед map

  10. Решето Эратосфена

    Я не достаточно хорош (с точки зрения производительности и красоты) для однострочного решения «Решета Эратосфена». Я рекомендую проверить труд Кристофа Гранда на эту тему под названием «Все любят Решето Эратосфена» для решения этой проблемы.

  11. Решение FizzBuzz

    (map #(cond (zero? (mod % 15)) "FizzBuzz" (zero? (mod % 3)) "Fizz" (zero? (mod % 5)) "Buzz" :else %) (range 1 101))
Оригинальный пост: «10 Clojure One Liners to Impress Your Friends»
Автор: Baishampayan



Python


После 10 удивительных однострочников на Scala/Ruby/Clojure/CoffeeScript, я подумал, что будет интересно сделать тоже самое на Python.

Без особого шума… поехали. Обратите внимание, что объявления переменных и импорты в отдельных строки по мере необходимости. Также каждая строка написана так, чтобы выводить результат на стандартный вывод для быстрой проверки.

Этот пост, возможно, один из самых быстрых, что я писал.
  1. Удваивание всех чисел в списке

    print map(lambda x: x * 2, range(1,11))

  2. Сумма списка чисел

    print sum(range(1,1001))

  3. Проверка вхождения подстроки

    wordlist = ["scala", "akka", "play framework", "sbt", "typesafe"]
    tweet = "This is an example tweet talking about scala and sbt."
    
    print map(lambda x: x in tweet.split(),wordlist)

  4. Чтение файла

    print open("ten_one_liners.py").readlines()

  5. С днём рожденья

    print map(lambda x: "Happy Birthday to " + ("you" if x != 2 else "dear Name"),range(4))

  6. Фильтрация списка чисел

    print reduce(lambda(a,b),c: (a+[c],b) if c > 60 else (a,b + [c]), [49, 58, 76, 82, 88, 90],([],[]))

  7. Получение и разбор XML от веб-сервиса

    from xml.dom.minidom import parse, parseString
    import urllib2
    # note - i convert it back into xml to pretty print it
    print parse(urllib2.urlopen("http://search.twitter.com/search.atom?&q=python")).toprettyxml(encoding="utf-8")

  8. Поиск минимума и максимума в списке

    print min([14, 35, -7, 46, 98])
    print max([14, 35, -7, 46, 98])

  9. Параллельная обработка

    import multiprocessing
    import math
    
    print list(multiprocessing.Pool(processes=4).map(math.exp,range(1,11)))

  10. Решето Эратосфена

    n = 50 # Мы получим простые числа между 2 и 50
    
    print sorted(set(range(2,n+1)).difference(set((p * f) for p in range(2,int(n**0.5) + 2) for f in range(2,(n/p)+1))))
Оригинальный пост: «10 Python one liners to impress your friends»
Автор: Dhananjay Nene



C#


  1. Удваивание всех чисел в списке
    Print("Multiple each item in a list by 2", Enumerable.Range(1, 10).Select(i => i * 2));

  2. Сумма списка чисел

    Print("Sum a list of numbers", Enumerable.Range(1, 1000).Sum());

  3. Проверка вхождения подстроки

    var wordlist = new[] { "C#", "and stuff" };
    var tweet = "This is an example tweet talking about C# and stuff";
    Print("Verify if a word exists in string", wordlist.Any(word => tweet.IndexOf(word) > -1));
    Print("Show matched words in string", wordlist.Where(word => tweet.IndexOf(word) > -1));

  4. Чтение файла

    Print("Read in a File", File.ReadAllBytes("oneliners.exe").Length);

  5. С днём рожденья

    Print("Happy Birthday", Enumerable.Range(1, 4).Select((i) => string.Format("Happy Birthday {0} ", i == 3 ? "dear NAME" : "to You")));

  6. Фильтрация списка чисел

    var passed = new List<int>();
    var failed = new List<int>();
    
    (from bucket in new[] { passed, failed } from i in new[] { 49, 58, 76, 82, 88, 90 } select new { bucket, i }).ToList().ForEach((tuple) => tuple.bucket.AddRange(Enumerable.Repeat(tuple, 1).Where((tup) => (tup.bucket == passed && tup.i > 60) || (tup.bucket == failed && tup.i <= 60)).Select((tup) => tup.i)));
    Print("Filter list of numbers >60", (IEnumerable<int>)passed);
    Print("Filter list of numbers <=60", (IEnumerable<int>)failed);

  7. Получение и разбор XML от веб-сервиса

    Print("Fetch and Parse an XML web service", XDocument.Load("http://search.twitter.com/search.atom?&q=scala"));

  8. Поиск минимума и максимума в списке

    Print("Find minimum in a list", Enumerable.Min(new[] { 14, 35, -7, 46, 98 }));
    Print("Find maximum in a list", Enumerable.Max(new[] { 14, 35, -7, 46, 98 }));

  9. Параллельная обработка

    Print("Parallel Processing", Enumerable.Range(1, 10).AsParallel().Select((i)=>i*2).AsEnumerable());

  10. FizzBuzz

    Print("Fizzbuzz", Enumerable.Range(1, 15).Select((i)=>i + (i%3==0?"fizz":"") + (i%5==0?"buzz":"")));
Оригинальный пост: «10 C# One Liners to Impress Your Friends»
Автор: Richard Birkby



Haskell


Соледуя за мемом (scala, ruby, clojure, python, f#, coffeescript, c#).

  1. Удваивание всех чисел в списке
    map (*2) [1..10]

  2. Сумма списка чисел

    foldl (+) 0 [1..1000]
    -- или лучше
    sum [1..1000]

  3. Проверка вхождения подстроки

    import Data.List
    let wordlist = ["monad", "monoid", "Galois", "ghc", "SPJ"]
    let tweet = "This is an example tweet talking about SPJ interviewing with Galois"
    
    or $ map (flip isInfixOf tweet) wordlist
    -- или лучше
    any (flip isInfixOf tweet) wordlist

  4. Чтение файла

    fileText <- readFile "data.txt"
    
    let fileLines = lines fileText
    -- или лучше
    let fileLines = fmap lines $ readFile "data.txt"

  5. С днём рожденья

    mapM_ putStrLn ["Happy Birthday " ++ (if x == 3 then "dear NAME" else "to You") | x <- [1..4]]

  6. Фильтрация списка чисел

    let (passed, failed) = partition (>60) [49, 58, 76, 82, 88, 90]

  7. Получение и разбор XML от веб-сервиса

    Для этого примера нужны пакеты curl и xml. Смотрите RWH для их установки.
    import Network.Curl
    import Text.XML.Light
    import Control.Monad
    
    let results = liftM parseXMLDoc $ liftM snd (curlGetString "http://search.twitter.com/search.atom?&q=haskell" [])
    -- или лучше
    Control.Applicative
    let results = parseXMLDoc . snd <$> curlGetString "http://search.twitter.com/search.atom?&q=haskell" []

  8. Поиск минимума и максимума в списке

    foldl1 min [14, 35, -7, 46, 98]
    foldl1 max [14, 35, -7, 46, 98]
    -- или лучше
    minimum [14, 35, -7, 46, 98] 
    maximum [14, 35, -7, 46, 98]

  9. Параллельная обработка

    Для этого примера необходим пакет parallel.
    import Control.Parallel
    import Control.Parallel.Strategies
    
    parMap rseq (*2) [1..100]

  10. Генерация простых чисел

    let pgen (p:xs) = p : pgen [x|x <- xs, x `mod` p > 0]
    
    take 40 (pgen [2..])
Оригинальный пост: «10 Haskell One Liners to Impress Your Friends»
Автор: Michael Fogus




А теперь ваши варианты, и да начнутся холивары! )
Tags:
Hubs:
+127
Comments 147
Comments Comments 147

Articles