LINUX.ORG.RU

Приходилось ли вам писать на Лиспе?


2

2

Ну, что ж, в Development так в Development, хотя Лисп давно перестал быть мемом одного лишь Development'а (и даже одного ЛОРа). Итак, сабж!

[ ] Да, профессионально и за деньги
[ ] Да, just for fun и для самообразования
[ ] Да, участвовал в opensource-проекте
[ ] Да, пилил скрипты Emacs/GIMP/AutoCAD/Lilypond etc.
[ ] Да, в рамках образовательной работы (лаба, курсовик, диплом)
[ ] Да, в рамках академической работы (диссертация, статья, монография)
[ ] Да, мне сказали, что лисперов любят девушки
[ ] Нет, но собираюсь
[ ] Нет, и не собираюсь
[ ] Вообще-то я Джон МакКарти, а вы кто такие?
[ ] в Советской России Лисп пишет на тебе!

Приветствуются развернутые ответы и верифицируемые пруфлинки. Например, на какую фирму работали, в каком конкретно opensource-проекте участвовали, какая была тема научной работы, помогло ли с девушками, и тому подобное. INB4 буквоедов: под «лиспом» подразумеваются все языки семейства: Scheme, CL, Clojure и прочие.

★★

Ответ на: комментарий от anonymous

>Ну и зачем все эти красивости? product = foldl (*) 1 и т.п. Суровая действительность прекрасно справляется с такими делами: r = Factorial(f). А Factorial в свою очередь может быть самописным, так и библиотечным. А библиотечным хоть на С, Перле, Асме и т.п.

Анон, ты дурак.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

>>> factorial n = product [1..n]

А если n < 0, ась? :)

То что ты хочешь? Ну тогда очевидно вернет 1.

Херасе. Это и правда очевидно?

tailgunner ★★★★★
()
Ответ на: комментарий от archimag

>О, отличная задача, я такое люблю, давай ты привдёшь решение базе Java или C#

Задача прочитать такой ХМЛ можеть занимать 0.001% от всего кода проекта. В котором заняты десятки программеров. И всем, особенно заказчику-покупателю, безразлично, насколько круто и академично там будут записаны разные выражения для факториалов. Всего-лишь сделает кто-то нужную библиотеку, её тупо подключат и забудут, пока не понадобится поменять там что-то.

anonymous
()
Ответ на: комментарий от tailgunner

>Херасе. Это и правда очевидно?

Да.. Произведение по пустому множеству равно 1. Как-бы в математике тоже так.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Произведение элементов пустого множества равно единичному элементу? ЛОР - кладезь знаний.

anonymous
()
Ответ на: комментарий от anonymous

>Задача прочитать такой ХМЛ можеть занимать 0.001% от всего кода проекта.

Зачем тогда ты об XML заикался?

В котором заняты десятки программеров. И всем, особенно заказчику-покупателю, безразлично, насколько круто и академично там будут записаны разные выражения для факториалов. Всего-лишь сделает кто-то нужную библиотеку, её тупо подключат и забудут, пока не понадобится поменять там что-то.

Да. Парсинг XML - изжеванная задача. Никто не мешает на том же лиспе использовать готовую сто раз вылизанную либу. Еще раз, зачем вообще про хмл тогда вспомнил?

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

>>>>> factorial n = product [1..n]

А если n < 0, ась? :)

То что ты хочешь? Ну тогда очевидно вернет 1.

Херасе. Это и правда очевидно?

Да..

*Main> let fact n = product [1..n]

*Main> fact (-2)

1

Я чего-то не понимаю?

tailgunner ★★★★★
()
Ответ на: комментарий от Waterlaz

> Еще раз, зачем вообще хмл, кгода есть s-expressions?

fixed =)

korvin_ ★★★★★
()
Ответ на: комментарий от anonymous

> Задача прочитать такой ХМЛ можеть занимать 0.001% от всего

кода проекта.


А, так вы отказываетесь уже от предложения сравнить? И при чём тут вообще факториал? Давайте просто, нужно пройтись по всем узла дерева, содержащим некий атрибут, и изменить его значение на тупое «Hello world»? Ни о какой академичности здесь речь не идёт, просто тупо чей инструмент для работы с XML лучше? Вы на языке на ваш выбор, а на CL. Готовы?

archimag ★★★
()
Ответ на: комментарий от Waterlaz

Произведение элементов множества должно обладать свойством:

П(AvB) = П(A)*П(B) при условии, что A&B = 0

П(A) = П(Av0) = П(A)*П(0) => П(0) = 1.

То, что быдлоанонимус этого не знает, дела ни в коем случае не меняет.

Waterlaz ★★★★★
()
Ответ на: комментарий от tailgunner

>>>> То что ты хочешь? Ну тогда очевидно вернет 1.

Херасе. Это и правда очевидно?

Да..

*Main> let fact n = product [1..n]

*Main> fact (-2)

1

Я чего-то не понимаю?

Я уже перестал понимать. В чем проблема? =) Должно получиться 1 и получается 1. Да, это уже не совсем факториал, ну так...

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

RTFM это что? Алгебра Куроша?

В математике существует результат произведения элементов пустого множества? Итак, берём *поле* действительных числе, выделяем в нём пустое подмножество и начинаем вычислять произведение его элементов. И как его получить, если там элементов нет???

anonymous
()
Ответ на: комментарий от anonymous

> Уж люди из университетов, профессора, касалось бы Лисп должен владеть их умами. Ан нет. Не владеет, псевдо коды изобретают, не похожие на Лиспы.

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

psv1967 ★★★★★
()
Ответ на: комментарий от tailgunner

Я чего-то не понимаю?

foldl (*) 1 [1..(-2)] == foldl (*) 1 []

http://haskell.org/ghc/docs/latest/html/libraries/base-4.2.0.0/src/GHC-List.html#foldl

foldl        :: (a -> b -> a) -> a -> [b] -> a
foldl f z0 xs0 = lgo z0 xs0
             where
                lgo z []     =  z
                lgo z (x:xs) = lgo (f z x) xs

свёртка по пустому множеству вернёт начальное значение (обычно - нейтральный элемент). в данном случае это 1

и мне, вообще говоря, не кажется, что это очевидно

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

>RTFM это что? Алгебра Куроша?

В математике существует результат произведения элементов пустого множества? Итак, берём *поле* действительных числе, выделяем в нём пустое подмножество и начинаем вычислять произведение его элементов. И как его получить, если там элементов нет???

Дуро ты наше, я тебе уже написал, почему так сделано. Если читать не умеешь, не мои проблемы.

Waterlaz ★★★★★
()
Ответ на: комментарий от jtootf

>и мне, вообще говоря, не кажется, что это очевидно

Ну.. это очевидно из определения свертки и/или произведения элементов множества.

Waterlaz ★★★★★
()
Ответ на: комментарий от anonymous

И как его получить, если там элементов нет???

скажи - а тот факт, что [0! = 1, тебя никогда не повергал в подобный ступор?

jtootf ★★★★★
()
Ответ на: комментарий от Waterlaz

Иными словами, это не просто так в хаскеле получилось, что prod [] равен 1. Если бы было иначе, было бы неправильно.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Если бы было иначе, было бы неправильно.

однако факта отсутствия натуральных чисел это не отменяет

jtootf ★★★★★
()
Ответ на: комментарий от Waterlaz

>Произведение элементов множества должно обладать свойством ....

Это что за произведение такое? Произведение в группе, кольце, поле требует пары элементов. Даже одного недостаточно. Подскажите, откуда взялись такие свойства произведения? Или Вы не про алгебру, а про какие специальные произведения ЛОРа?

anonymous
()
Ответ на: комментарий от anonymous

> Итак, берём *поле* действительных числе, выделяем в нём пустое подмножество и начинаем вычислять произведение его элементов. И как его получить, если там элементов нет???

Ещё попробуй доказать, что 0.(9) ≠ 1

naryl ★★★★★
()
Ответ на: комментарий от anonymous

> Или Вы не про алгебру, а про какие специальные произведения ЛОРа?

Про оператор ∏.

naryl ★★★★★
()
Ответ на: комментарий от anonymous

Произведение в группе, кольце, поле требует пары элементов. Даже одного недостаточно.

скажи, чему равно x^0 для произвольного x из R?

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

Надеюсь, что Вы не считаете нулевой элемент поля действительных отсутствием элемента?

нет, не считаю. указанного выше морфизма ∏:([a], ^) -> (∏[a], *) вполне достаточно для того, чтобы вводить ∏[] = 1 в определение - так же, как и в случае факториала

x^(0) = x(-i + i) = x^(-i)*x^(i) = 1

а давайте возьмём степень = 0 из Z

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

[ ] Я сам написан на Лиспе!

слава роботам!

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

[ ] Я сам написан на Лиспе!

Привет, Элиза!

mv ★★★★★
()
Ответ на: комментарий от jtootf

Что такое =0 из Z? комплексное число в нулевой степени? К чему вы клоните? К определению некоторого действия на подмножестве элементов?

Вот Вы определили, что П(М) это М1*М2 .... В *кольце* можно записать (М1*М2) * (М3*М4....) или П(П(Ма) & П(Мв)). Отсюдо логично задать П(пустое множество) как единичный элемент, дабы было что на что умножать. Но само умножение требует 2 элемента.

Поэтому не умножение, а оператор П, действующий на подмножествах элементов кольца.

anonymous
()
Ответ на: комментарий от anonymous

Что такое =0 из Z? комплексное число в нулевой степени?

выпиши решения диофантового уравнения вида n^x = 1 (n != 1). с детальными выкладками ходов решения

Вот Вы определили, что П(М) это М1*М2 ...

это где я такое определил?

Отсюдо логично задать П(пустое множество) как единичный элемент

ну так и в чём проблема? :)

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>выпиши решения диофантового уравнения вида n^x = 1 (n != 1)

Как говорил Матроскин: А вы почему интересуетеся? Вы не из милиции случайно?

anonymous
()
Ответ на: комментарий от anonymous

Поэтому не умножение, а оператор П

это буквоедство, причём не очень чистоплотное: разговор о конкретных элементах множества начал именно ты

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

А вы почему интересуетеся?

из любопытства. возведение в целую степень - более-менее умозрительный процесс, эквивалентный П(N), где N = {n, n...,n}, |N| = a; и тем не менее, n^0 вполне себе определено, и равно 1

мне интересно, как человека может смущать факт П([]) = 1, и не смущать факт n^0 = 1

jtootf ★★★★★
()

Ну что, кто-то ещё сомневается в крутости Лиспа?

На вопрос «Приходилось ли вам писать на Лиспе?» собран огромный урожай комментариев, включая вопросы трудоустройства, проектирования, а также алгебры и диофантовых уравнений.

anonymous
()
Ответ на: комментарий от jtootf

> как человека может смущать факт П([]) = 1, и не смущать факт n^0 = 1

возведение в действительную степень опеределено как придел рациональных степеней.

anonymous
()
Ответ на: комментарий от anonymous

возведение в действительную степень опеределено как придел рациональных степеней.

круто. и что?

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

П([]) смущает, так как это задаёт алгоритм перемножения пар элементов. И тут непонятно, как же их можно перемножить, если там может быть только 0 и 1 элемент. Поэтому специально вводится в определение П([]) = единичный элемент.

n^y не есть алгоритм, а есть аналитическая функция и n^0=1 легко получается из её свойств x^(a+b) = x^a*x^b. n^(-1 + 1) = n^-1*n^1 = 1.

anonymous
()
Ответ на: комментарий от anonymous

>П([]) смущает, так как это задаёт алгоритм перемножения пар элементов. И тут непонятно, как же их можно перемножить, если там может быть только 0 и 1 элемент. Поэтому специально вводится в определение П([]) = единичный элемент.

n^y не есть алгоритм, а есть аналитическая функция и n^0=1 легко получается из её свойств x^(a+b) = x^a*x^b. n^(-1 + 1) = n^-1*n^1 = 1.

П() - _Не_ алгоритм.

Waterlaz ★★★★★
()
Ответ на: комментарий от anonymous

>возведение в действительную степень опеределено как придел рациональных степеней.

Канонiчнымъ явяляется определение сперва натурального логарифма, а потом соответствующей экспоненты.

Но самое главное, анон, втф? при чем тут это вообще?

Waterlaz ★★★★★
()
Ответ на: комментарий от anonymous

Там ошибка в функции факториала, написанной пользователем fact = Product[1..n]. Надо выдавать ошибку для отрицательных чисел и честную 1 для 0 из определения факториала. А это не делается и выдается значение оператора П от пустого множества.

anonymous
()

отсталый срач вышел, какую-то лажу все про синтаксис и факториал обсуждают. тема элитных применений лиспа, где он будет экономически оправдан, не раскрыта.

anonymous
()
Ответ на: комментарий от anonymous

> тема элитных применений лиспа, где он будет экономически оправдан, не раскрыта.

Везде!

Ты это ожидал услышать?

naryl ★★★★★
()
Ответ на: комментарий от archimag

>А, так вы отказываетесь уже от предложения сравнить? И при чём тут вообще факториал? Давайте просто, нужно пройтись по всем узла дерева, содержащим некий атрибут, и изменить его значение на тупое «Hello world»? Ни о какой академичности здесь речь не идёт, просто тупо чей инструмент для работы с XML лучше? Вы на языке на ваш выбор, а на CL. Готовы?

А давайте лучше так - у нас есть апачевый access-лог (вы же вебщик, знаете что это такое), из которого нужно посчитать количество нелокальных запросов (не из 192.186*). Я на перле, вы на CL. Готовы?

anonymous
()
Ответ на: комментарий от anonymous

> Я на перле, вы на CL.

CL против всех? Выберите лучше задание для ЯП общего назначения. Это что на перле, что на awk в одну строчку решается.

naryl ★★★★★
()
Ответ на: комментарий от anonymous

Или давайте вы на любимом и ранее предложенном C, а мы - на CL.

naryl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.