Продолжаем обсуждение лучшей книги всех времен и народов, а так же одноименных лекций. Приглашаются сюда как новички, ломающие над ней голову, так и опытные ребята, прошедшие ее всю (или большую ее часть).
Где я могу писать свой код, для выполнения заданий? Онлайн редактор, с поддержкой Scheme: https://repl.it/languages/scheme IDE для racket подобных языков(но есть и поддержка Scheme, но её нужно включить) - https://racket-lang.org/
Для изучения языка-схемы порекомендую первые две главы https://www.scheme.com/tspl4/ Слоником в итт называют книгу The little schemer (но мне он не зашел из-за слишком своеобразной подачи материала).
вкатываюсь, наслаждаюсь первыми победами над задачами, проникаюсь Сначала читал оригинал, потом переключился на русский перевод и натолкнулся на различия в русской и оригинальной книгах, когда проверял ответы к задаче 1.11 В русском переводе: f(n) = n, если n < 3, и f(n) = f(n−1)+f(n−2)+f(n−3), если n ≥ 3. в оригинале f (n - 1) + 2f (n - 2) + 3f (n - 3) if n ≥ 3. Различия не принципиальные сейчас, всего-то коэффициентов добавили в формулу убрали, но настораживает, что будет дальше?
>>1404803 >Сначала читал оригинал, потом переключился на русский перевод и натолкнулся на различия в русской и оригинальной книгах, когда проверял ответы к задаче 1.11 >В русском переводе: >f(n) = n, если n < 3, и f(n) = f(n−1)+f(n−2)+f(n−3), если n ≥ 3. >в оригинале >f (n - 1) + 2f (n - 2) + 3f (n - 3) if n ≥ 3. Ничего подобного. В обеих книгах все одинаково. Приложил скрин английского 2-го издания. Русское 2-е издание держу в руках...
>>1404820 >>1404803 >f (n - 1) + 2f (n - 2) + 3f (n - 3) if n ≥ 3. Не туда смотрел. Подумал что ты про то, что в английской версии нет условия f(n) = n, если n < 3. Ты же это не написал. И незаметил, что в русской версии нет 2f и 3f.
>>1404803 Да, это опечатка/ошибка набора, каковых в русском переводе дохуя. Сам перевод хорош, но вот эти тупые опечатки всё портят. Иногда мне кажется, что финальный текст русского перевода заставили набирать пучок студентов за зачёт по ЯПМТ.
>>1405314 Уась, большинство мейнстримных языков являются типа ООП-языками (Java, C#, Python, Ruby, PHP, C++). Хочу найти пособие как на них писать, используя классы, интерфейсы, - вот это вот всё. Только руководство хочу в духе СИКП и HTDP.
>>1405354 >Ну в хтдп есть целая глава про это Про что? Я просто не читал, читал только СИКП.
Мне нужно не просто теорию ООП, а то как писать на языках вроде C#. Именно практическое руководство. И чтобы авторы были адекватные инженеры, с опытом и в ФП и в ООП. Не читаю авторов, которые пишут "ООП это абстракция, наследование, полиморфизм". Скорее всего такие авторы не понимают ООП, и не понимают как писать на языках с классами, а просто повторяют заученные слова.
В СИКП к примеру отсутствует такое, нет аксиоматизма, догматизма, фанатизма, вместо этого просто показывают как можно элегантно решать задачи без лишних абстракций. В большинстве книг по ООП все наоборот. Стараются слепо верить догмам, вводить как можно больше абстракций, смещая фокус с решения задачи на следование глупым догмам. Такой фанатизм меня раздражает.
Адекватный автор должен показывать как решать задачи используя классы, какие задачи так лучше решаются, в каких случаях такой подход неудобен, и показывать альтернативу, сравнивать с ФП.
>>1405288 Не знаю, но от чувака, который настоятельно рекомендовал SICP можно было услышать, что вторая обязательная для прочтения книга - Code Complete. Только в начале там много воды и не стоит забрасывать ее из-за этого.
>просто показывают как можно элегантно решать задачи без лишних абстракций. В большинстве книг по ООП все наоборот Ну как бы ООП - это чисто маркетолухная шешура, кроме этих самых догм там ничего как бы и нет. Анон, очнись, 95% кодеров на джаве генерируют в своей идешечке геттеры и сеттеры для каждого дата-класса, потому что "ну бля инкапсуляция епта ооп это же инкапсуляция я на рсдн так прочитал а ты кто воще такой".
>показывать альтернативу, сравнивать с ФП. Предлагаю тебе прочитать книжки Егора Бугаенко - там нет никаких альтернатив и никакого сравнения, там как раз максимально фанатичный (и весьма неортодоксальный) взгляд на ООП. А потом самому сравнить и сделать выводы (цель книги именно такая) - раз ты сикп прочитал, то у тебя достаточно знаний и навыков для этого.
Сижу дома думаю чем заняться Толя Маркин24/05/19 Птн 06:58:27#16№1405521
Ну что, второй день подряд занимаюсь. В данный момент остановился на 89 странице из 565, лол; что равняется примерно 16% книги. Утешает то, что первые 10% я прошел за 4 дня, т.к. темы были схожие с htdp второй версии и темы идут в другом порядке, т.е. еще будут темы, которые я раньше полноценно прорешивал и разбирался, но в этой книге их еще не было, т.е. быстрые рывки будут. А так продвигается все, даже тупых вопросов сюда не задаю, как вы видите. Структуры просто охуительно расписаны в сравнении со второй частью книги. Так что рекомендую всем начинающим не ебсти голову, не лезть в сикп или зеленого слоника, а просто брать первую версию htdp и прорешивать ее. Такие дела.
>>1409573 Нет, он пробовал sicp, little schemer (слоник) и еще что-то - ему не зашло. Теперь занимается по htdp.
Раз пошла пьянка с отчетами, напишу и я свой, который никому нахер не вперся. Прорешал первые 3 главы SICP. Вцелом неплохо, местами интересно, местами материал был и так известен (формо-крудошлеп я), местами упражнения подзаебывали. Могу поставить за эти главы 4 звезды из 5 (так как не понял от чего весь этот культ вокруг книги, возможно были просто завышенные ожидания). Но для вправки мозгов годится.
Пока откладываю ее в сторонку и буду дочитывать оставшиеся книги из списка, который Кирюша-хекслет составлял. Потом надо будет работку сменить, и уже после, возможно , вернусь и буду писать свой интерпретатор, проходя 4 и 5 главы.
>>1409583 Я же после SICP'а хочу Кострикина прочитать, хотя бы первые две книжки, как в ШАДе советуют, а помимо него Зорича с Демидовичем. Зорича немного читал, как и Кострикина. В принципе, ничего сложного нет, но на это нужно много свободного времени. После хочу плотно заняться алгоритмами. "Грокаем Алгоритмы" я практически всего осилил, мне даже было скучновато, а вот с Корменом уже посложнее, там тупняки на пару часов. Можно параллелить всё это дело, конечно же.
А интерпретатор/компилятор я скорее всего тоже не буду писать, если я захочу его запилить - я открою магическую книгу дракона.
>>1409573 Я решаю первую версию htdp; вторая версия не пошла, т.к. структуры там слишком по уебански объясняют, точнее вообще почти не объясняют. sicp совсем не пошел, т.к. я вообще с полного нуля пытался ее решать. Задачи решаю все, некоторые не получаются, но не из-за моей тупости, а то, что просто не могу понять, что от меня хотят - сложности перевода с инглиша. >>1409592 Первая версия htdp. Говорю это как человек, который до нее пытался сначала sicp, потом зеленый слоник, потом книжка со второго поста в этом треде - в самом конце поста, потом htdp второй версии и только после них, пятой книгой была htdp первой версии, которую тебе и советую.
>>1409599 Да, для самого начала можно первые 2 главы той книги, со второго поста прочитать. А дальше там идет углубление в сам язык, а не в обучение программированию.
>>1404382 (OP) >Где я могу писать свой код, для выполнения заданий? А есть смысл брать упражнения сикп и выполнять их на другом языке программирования?
>>1404382 (OP) Где-то натыкался на такое мнение, что SICP идет очень тяжело потому, что с определенного момента требует знаний по теме (в частности математику). Что там еще желательно параллельно осиливать чтобы освоить книгу?
>>1409945 Математика там особо не нужна, более того некоторые упражнения (например на доказательство можно пропускать), так как практического смысла для разработчика они не несут. Остальные формулы, которые будут нужны, даются по ходу книги.
Осилить надо документацию по установке Racket и пакета sicp к нему. Все остальное в книге рассказывается прежде чем дать задание.
>>1409960 Может тебе и не плох, я ведь не знаю что тебе больше подходит. У меня есть необходимость держать код на локалке, трекать гитом, заниматься иногда в оффлайн-моде.
>>1410011 Стоят в очереди в столовой джавист, питонист и php-шник. Первой пришла очередь джависта, и он говорит: - Дайте мне Борщ борщ нью Борщ. Питонист как начал над ним угарать, и заказывает громко: - Мне борщ - и шепотом прибавил - еще деф пюрешка (селф, котлетки). Взял свой заказ и ушел. Последний подходит php-шник и говорит: - А у меня с собой - достаёт контейнер с говном и начинает жрать.
Ребята, кто читал Lisp in small pieces aka интерпретация Лиспа и Scheme? Как запустить код из первой главы? Не хватает нескольких функций как я понял, atom? и еще несколько, но в книге о них не слова. Как быть?
>>1410762 Я по диагонали прочитал, но охуел от сложности, попытки запускать код бросил после первых же провальных попыток. Схема, в конце концов, простой язык, её можно в голове "запускать". По идее, atom? тебе должна предоставлять нижележащая лисп-система, на которой ты всё пишешь. А вообще, нахуя ты эту книжку читаешь? Собираешься свой компилятор Scheme писать?
>>1411086 Да не, и так много соблазнов, да отвлекающих факторов. ITAOTS - шо цэ за хуйня? Гугл молчит. >>1411172 Сикп слишком сложно, да и хтдп нихера не легкая, но все-таки продвигаюсь и получается. И просветление как раз получаю в каждой теме глаза открываются на что-то новое. >>1411179 Я английскую читаю, с переводчиком.
>>1409945 SICP руинит программирование для многих как область деятельности.
More generally, SICP doesn’t state how to program and how to manage the design of a program. It leaves these things implicit and implies that students can discover a discipline of design and programming on their own. The course presents the various uses and roles of programming ideas with a series of examples. Some exercises then ask students to modify this code basis, requiring students to read and study code; others ask them to solve similar problems, which means they have to study the construction and to change it to the best of their abilities. In short, SICP students learn by copying and modifying code, which is barely an improvement over typical programming text books.
SICP’s second major problem concerns its selection of examples and exercises. All of these use complex domain knowledge. ... Some early sections and the last two chapters cover topics from computer science ...
While these topics are interesting to students who use computing in electrical engineering and to those who already have significant experience of programming and computing, they assume too much understanding from students who haven’t understood programming yet and they assume too much domain knowledge from any beginning student who needs to acquire program design skills. On the average, beginners are not interested in mathematics and electrical engineering, and they do not have ready access to the domain knowledge necessary for solving the domain problems. As a result, SICP students must spend a considerable effort on the domain knowledge and often end up confusing domain knowledge and program design knowledge. They may even come to the conclusion that programming is a shallow activity and that what truly matters is an understanding of domain knowledge. Similarly, many students lack an understanding of the role of compilers, logical models of program execution, and so on. While first-semester students should definitely find out about these ideas, they should do so in a context that reaffirms the program design lessons.
In summary, while SICP does an excellent job shifting the focus of the first course to challenging computer science topics, it fails to recognize the role of the first course in the overall curriculum. In particular, SICP’s implicit approach to program design ideas and its emphasis on complex domains obscures the goal of the first course as seen from the perspective of a typical four-year curriculum.
Он вреден как опыт для тотальных нубов. Поэтому то его даже в MITе изучают далеко не сразу, а лишь с пункта 6.037 курса.
>>1412260 > SICP doesn’t state how to program and how to manage the design of a program. Wat
> SICP students learn by copying and modifying code Wat
> They may even come to the conclusion that programming is a shallow activity and that what truly matters is an understanding of domain knowledge. Wat
Лично для меня, прочитавшего пока что сотню с лишним страниц, главной пользой книги оказалось то, что я научился адекватнее выстраивать иерархию кода и куда реже пишу одни и те же куски по много раз.
>>1412260 Computer Science is a terrible name for this business. First of all, it's not a science. It's also not really very much about computers. Это всё магия.
Тут решил более четко следить за своим образованием, посчитал страницы и прочую хуйню. Короче вторую версию хтдп я прошел на 21% и бросил, т.к. ебаные структуры описывались очень плохо. Сейчас прорешиваю первую версию хтдп и прорешал ее на 20%. Но темы идут в другом порядке, допустим к этим 20% структуры разобрали, а к тем 21% второй версии структуры только начинаются. Сейчас по рекурсии и спискам не было ничего, с биг-бангом еще не сталкивался. Одним словом будут еще быстрые рывки в этой книге, когда будут темы, которые я проходил и полноценно разобрался, к слову сейчас списки с намеками на рекурсию начались. А так если тема незнакомая то 0.5% книги в день прохожу, если знакомая то до 3% в день доходит. Такие вот дела.
>>1404382 (OP) Блин, у меня есть фетиш, если это можно так назвать, коллекционировать книги связанные с технологиями/программированием. Но дочитывать я их не дочитываю нихуя. Просто приятно наблюдать как на полке находятся
>>1413761 Я обожаю заходить на двачи, чтобы видеть таких вот гениев. Когда я вижу существование подобных людей практически вживую, я понимаю, что мне еще есть куда расти.
Анон, расскажи мне, как ты учишься, если тебе не трудно.
>>1413856 Первые 3 главы это 225 упражнений. Допустим, ты прорешиваешь не все, оставим 200. Возьмем срок 2 недели - это 14 дней. Тогда в день надо решать около 14 упражнений. В среднем программист может продуктивно работать часов 6 в день, но возьмем 8 (и это без учета перерывов). 8 часов - это 480 минут. 480 / 14 - что выходит около 34 минут на упражнение. И это только упражнения, без прочитывания теории или просмотра лекции. Так что крайне маловероятно.
>>1413888 Там куча упражнений, которые делаются за менее чем 5 минут устно или на листочке, а в первой главе так вообще нет ничего стоящего, можно потратить день на нее для ознакомления с языком.
>>1413900 >в первой главе так вообще нет ничего стоящего, можно потратить день на нее для ознакомления с языком. Твое ебало, когда даже половины первой главы не осилил и бросил :З
Вот мне интересно, например упражнение 1.10, есть те, кто расписывал на листочке вызовы (A 3 3)? Просто, иногда возникает вопрос, авторы хотят чтобы я вбил это в терминал, или, как в 1980-х, чтобы сам прорешал на листочке.
>>1414768 Да я в самом начале обучения пытался его читать. Вообще не понимал, что происходит, пытался решать на бумаге, а не в программе и т.д. Сейчас-то скорее всего первую главу вытяну, если решать начну, но прорешиваю хтдп и бросать пока не планирую.
>>1414792 Попробуй реализацию на другом языке посмотреть. Схема уебская, черт ногу сломит с этими скобками, а синтаксис этот тебе нигде больше не пригодится все равно. Там все равно вся фишка книги не в схемолиспах.
Аноны поясните почему repl.it не выполняет вычисление модуля числа. Я просто совсем начинающий и не знаю даже как может не работать даже код из учебника. Заранее спасибо.
Рапортую. Занимался я понемногу в мае и по сегодняшний день июня. Был перерыв с января, когда хтдп я прорешал на 10%. Сейчас делаю очередной перерыв, т.к. мозги закипели. Сейчас книга прорешана на 25% - ЧЕТВЕРТЬ КНИГИ. Радует то, что все вполне получается. Думаю к началу-середине июля вернусь в обучение.
>>1414852 >Там все равно вся фишка книги не в схемолиспах Пока что не удалось доказать, что использование неучебных языков способно как-то обогатить сикп или хотя бы не обеднить его.
Кстати, написав игруньку для геймджема на Scheme в 1.5 килостроки, и продолжая заниматься этим б-гоугодным делом, я наконец могу сформулировать, почему лиспы ну, схема, по крайней мере на голову выше других языков: волшебное число Миллера никто не отменял даже для погромистов, держать в голове несколько нетривиальных объектов очень сложно для N>5. Погромисты на более других, "промышленных" языках вынуждены, помимо предметной области, держать в голове инфу о выебонах своего языка - о классах, методах, суперклассах, типах, позиционных и кейворд аргументах, эстэдэмапах, кофейных бобах и прочей хуете, за счёт чего разработка на таких языках крайне часто скатывается в суходроч на инструменты и написание болейрплейта вместо решения актуальных проблем бизнеса. На лиспе у тебя почти нихуя нет, кроме скобок и функций, приходится думать не обо всякой хуйне, которую понавыдумывали для тебя создатели языка (типа "ох, что бы мне тут применить, наследование, композицию через указатель, или может абстрактный proxyfactorybeanwrapper"), тебе не остаётся ничего другого, кроме как думать об актуальной задаче у тебя на руках. После 10+ лет дрочьбы на более распространённых языках это вообще волшебное чувство, у меня никогда такого раньше не было.
>>1415430 На ракете. Не знаю, у меня всё быстро. Хотя время запуска долгое, прямо как у явы, потому что там в стандартной библиотеке дохуя всего.А щас к лету в ракетке окончательно перепилят ядро на Chez, и будет вообще n1 в бенчмарках.
>>1415961 Я хуй знает, я пока только анонов спрашиваю. Выучу алгоритмы, матан, дифгеом, мехмат, молекулярку, сделаю свою копию двача и лицокниги, потом устраиваться буду.
Ну не верстальщиком ладно, js-программистом, реакто-дрочилой. Там спрашивают. Вы все равно уже все прочитали и просто на аниме-девочек тут дрочите. Давайте сделаем тред.
>>1416520 Чисто так, с потолка, по-идее у тебя будет сравнение двух чисел. Ну и отними от большего меньшее. Потом большее подели на 100 и полученное число умножь на разницу этих чисел. ( (- х у) (/ х 100)) Хотя скорее всего я хуйню написал, т.к. не вникал в задачу. оп*
(* (- х у) (/ х 100)) ебаный бб-код. если окажется так, что допустим У меньше икса, там через модуль можешь сделать, чтобы положительный ответ был, ну разница эта ебаная
>>1416520 Открыл своё решение двухгодичной давности, и увидел вот такое: код не смотри, намёк ниже (define (good-enough? guess new-guess) (< (abs (- guess new-guess)) 0.000001)) т.е. я просто сравниваю модуль разницы guess и нового x с очень маленьким числом.
>>1416530 как бы способ определения я итак понимаю. А как подобную вещь интегрировать к код? как интерпретатор будет определять когда возникается new-guess если изначально он оперирует с guess и x.
>>1416612 Она уже "интегрирована", в коде из книги вызывается функция good-enough?. Зачем ты ввёл новую функцию compare, непонятно, тех функций, которые были в данном тебе коде, достаточно для решения задачи.
> изначально он оперирует с guess и x Интерпретатор кстати, может быть и компилятор "оперирует" с тем, чем ты ему указываешь. Назовёшь переменную x - будет переменная по имени x, назовёшь new-guess - будет new-guess.
Подсказка для тебя: в теле функции sqrt-iter значение следующей итерации (то самое new-guess) понадобится два раза, поэтому логично положить его сначала в переменную, чтобы два раза не считать. Переменные в Scheme можно определить с помощью define, дальше, надеюсь, сам справишься.
> возникается Ууу, братюнь, тебе не сикп надо читать, а учебник по русскому для начала. А вообще, норм троллинг тупостью, я аж чуть не порвался.
>>1416653 >троллинг тупостью Сколько раз я слышал в день я слышал эту фразу, когда только начинал обучение.. прям на душе потеплело от ностальгии :З мимо оп
>>1417298 алсо сикп не про лиспы а про идею создания абстракций по большей части, поэтому круды на лиспе будут такие же унылые, просто синтаксис другой
Упражнение 1.5. Бен Битобор придумал тест для проверки интерпретатора на то, с каким порядком вычислений он работает, аппликативным или нормальным. Бен определяет такие две процедуры: (define (p) (p)) (define (test x y) (if (= x 0) 0 y)) Затем он вычисляет выражение (test 0 (p)) Какое поведение увидит Бен, если интерпретатор использует аппликативный порядок вычислений? Какое поведение он увидит, если интерпретатор использует нормальный порядок? Объясните Ваш ответ. (Предполагается, что правило вычисления особой формы if одинаково независимо от того, какой порядок вычислений используется. Сначала вычисляется выражение-предикат, и результат определяет, нужно ли вычислять выражение-следствие или альтернативу.)
Бле чёт я не догоняю нафига в р р в скобки берёт и что это должно значить? И так же непонятно как тест будет работать. Компилятор у меня тупо виснет, когда я этот код забиваю.
Решил посмотреть что в оригинале и задание не нашёл. Чё столько отличий-то??? Я думал это просто перевод, а тут какая-то адаптация для йоддефицитных. Какая из книг более актуальна? С учётом слабого английского.
>>1422189 >Решил посмотреть что в оригинале и задание не нашёл Есть оно там точно под таким же номером. Открой в конце книги указатель на все упражнения и перейди по нему, если так найти не можешь.
Если p - процедура, то тогда (p) - вызов процедуры, очевидно же
> И так же непонятно как тест будет работать. Компилятор у меня тупо виснет, когда я этот код забиваю. Ну все верно. В нашем случае с апликативным порядком оно и будет зацикливаться, т.к. будет бесконечный вызов процедуры, а вот при нормальном - оно бы просто выдало 0
>>1422189 Если порядок аппликативный то кал застрянет в бесконечном цикле определения функции p потому что в строке (test x y) (if (= x 0) 0 y) сразу подставит ноль и p, а потом полезет в p (надо ж её раскрыть, мы же у мамы аппликативные) и там задохнётся. А если нормальный то он сначала проверит равен ли икс нулю (а он равен), перейдёт к возврату нуля и в рот он хотел ебать что там за p такое дальше стояло. Это по сути иллюстрация фразы "не лезь бля дебил сука ебаный" только на схеме.
>>1422210 >Но при дефане р вызывает саму себя? Это хороший вопрос. Поразмыслим логически. Во-первых если бы он вызывал, то могла ли программа работать так, как задумано? Во-вторых (хотя это самое главное), а зачем и самое главное КАК ему вызывать функцию в дефиниции? Чтобы её вызвать. нужны аргументы, верно? А где ты возьмёшь аргументы, если ты пытаешься функцию вычислить прямо в определении? Нигде. Следовательно и делать этого не нужно. На самом деле есть такая штука как "синтаксический анализ", и компилятор может анализировать синтаксис кода до его выполнения, НО обрати внимание что чисто синтаксически выражение (define (p) (p)) совершенно легитимно.
>>1422215 Не знаю. У меня средний-выше среднего. Мне русскую версию не так комфортно было читать (шрифт, оформление), поэтому занимался по той, что с гитхаба от sarabander.
Упражнение 1.6. Лиза П. Хакер не понимает, почему if должна быть особой формой. «Почему нельзя просто определить ее как обычную процедуру с помощью cond?» — спрашивает она. Лизина подруга Ева Лу Атор утверждает, что, разумеется, можно, и определяет новую версию if: (define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause))) Ева показывает Лизе новую программу: (new-if (= 2 3) 0 5) 5 (new-if (= 1 1) 0 5) 0 Обрадованная Лиза переписывает через new-if программу вычисления квадратного корня: (define (sqrt-iter guess x) (new-if (good-enough? guess x) guess (sqrt-iter (improve guess x) x))) Что получится, когда Лиза попытается использовать эту процедуру для вычисления квадратных корней? Объясните.
Да объясните плз. Этож вроде нормально для липса использовать процедуры в процедурах в которых используются процедуры и т.д. Все параметры вроде как определены вполне конкретно чё он сука виснет то???
Эт вообще нормально что у меня сложности возникают на таком этапе?
>>1422365 нашёл ответ. Я так понял что в обычном иф компил не доходит до скрт. Но что меня больше интересует главная проблема в том что процедура в своём теле вызывает саму себя, и еслиб не особенности иф она бы нифига не работала. Насколько вообще это справедливо в общем случае? То есть насколько удачная идея вызывать процедуру в собственном теле?
>>1422333 HTDP - это типа упрощенный вариант SICP для тех, кто не хочет задачки связанные с математикой. Обычно рекомендуется попробовать SICP, если совсем не идет, то можешь браться за HTDP
>>1422388 >насколько удачная идея вызывать процедуру в собственном теле Это рекурсия - нормальная вещь, если есть условия выхода из нее В книге все описано
>>1422388 > и еслиб не особенности иф она бы нифига не работала Вангую там загвоздка в порядке вычислений, ты же выше постил про нормальный и аппликативный порядок, вот при аппликативном сначала раскрываются все аргументы, и если на каком-то моменте пойдёт бесконечная рекурсия, то она пойдёт. Возможно если бы эта хуйня в нормальном порядке вызывалась то и норм было бы ("возможно" потому что не помню книжного контекста и в книжку лень лезть)
>>1422413 >>1422473 дык понятно что рекурсия интересная практика использовать метод до того как раскрыта его суть, еслиб я был корзиночкой с бостона то после первой же лекции отправился толкать дурь в бронксе. Правильно ли я понял что при рекурсии в лиспе не считая родных процедур типа if и cond если я условия выхода из цикла ставлю ДО вызова процедуры то ничего кроме аутофелляции я не получу? Т.е. если я сейчас подшаманю в проге из примера и смогу сделать условия выхода после вызова процедуры то она заработает?
>>1422547 Я тебе отвечал именно на вопрос про рекурсию > насколько удачная идея вызывать процедуру в собственном теле
касаемо же упражнение тут не только в рекурсии же дело, а как написали выше в порядке вычислений. В данном случае new-if сделана как процедура и поскольку у нас апликативный порядок, то с начала будут вычисляться передаваемые аргументы. Вот тут она и зациклиться из-за вызова sqrt-iter в else-clause нашего new-if.
как в лиспе задать цикл с фиксированным числом повторений? Я уже просто ору, переменные так неочевидно реализованы, что ебучий счётчик сделать не могу то есть могу, но тогда надо количество интераций при вызове процедуры вбивать.
>>1422655 > как в лиспе задать цикл с фиксированным числом повторений? Эмм… вызвать функцию из другой функции и передать ей количество повторений аргументом, а она будет в конце рекурсивно вызывать себя опять с аргументом на единицу меньшим? Ну так, просто первое что в голову пришло.
>>1422862 Я сегодня делал цикл в sqlite рекурсией, в итоге не осилил как надо было мне нужно было n уникальных случайных чисел, я получал меньше чем нужно и сделал на питоне в одну строчку, но любопытно, что там есть такая возможность.
>>1422876 Мой подход был совсем неверным, надо было всего лишь рекурсивно сгенерировать числа от 1 до n, пример чего есть в доках, далее просто order by random() limit k; А я пытался проверять на каждом шаге рекурсии получил ли я новое число.
Мне вот просто интересно мы вообще тут сидим с какой-то же целью не думаю, что двачеры стремятся к сферическому самосовершенствованию. Собственно если вдруг я научусь программировать на этом это хоть поможет при использовании других языков?
>>1422961 >если вдруг я научусь программировать на этом это хоть поможет при использовании других языков?
Не, тебе уже ничего не поможет с такими формулировками.
А если серьезно, то да (но не французского, лол). Первые 3 главы - это основы, которые пригодятся с любом случае. Проблема в том, что люди у которых нет опыта это не могут понять и не верят остальным, а те, у которых уже много опыта должны были перерости основы, данные в этих главах. В итоге две категории людей считают, что книга не нужна, только по разным причинам.
>>1422996 Без языка только алгоритмы, дискретка, бд и всякие рефакторинги с паттернами. Как тут писали "ну и толку что ты можешь массив отсортировать десятью способами если вывод в файл не осилишь"
>>1422974 Ты работаешь программистом? Если нет - выбирай сферу деятельности и изучай языки и экосистему для того, чем хочешь заниматься. Ну и можешь заглянуть в этот список книг https://ru.hexlet.io/pages/recommended-books Если уже работаешь - странный вопрос, ты уже должен был понять, что ты хочешь изучать помимо работы.
Но пару собственных вещей могу подкинуть.
что-нибудь эдакое? - Теория Категорий (Бартош Милевски) а по прогать? - haskell (LYHFGG, Haskell Programming From First Principles) а что-нибудь похожее на лиспы? - clojure (Clojure for brave) а по хардкору? - TAPL а еще варианты? - Erlang/Elixir (Learn You Some Erlang for Great Good), Prolog (Learn Prolog now)
>>1423015 Посмотрел, но большая часть из них у меня уже есть. Просто думал, может есть что-то такое же фундаментальное и похожее на СИКП. Но после него советуют обычно "Чистый код" или "Совершенный код".
Если не надо передавать состояние между вызовами тела цикла https://pastebin.com/MZvEMGnM Если надо, то используй reduce, или пиши рекурсивную функцию под конкретный случай.
>>1422547 >не считая родных процедур типа if и cond if и cond - не процедуры, а особые формы. Если дочитаешь до четвёртой главы, на глубоком уровне поймёшь, что это такое, реализовав их вручную.
А можно я буду использовать не лисп, а питухон например или даже С при изучении сикпа? Мне ентот ваш лисп вообще не заходит, у меня есть опыт вката на С.
>>1425905 я так понял там весь прикол как раз в том чтоб запилить программу в 3 строки. Большинство заданий в сикпе элементарны если их реализовывать не в лиспе. А так хоть просрёшся маленько
>>1426310 > Большинство заданий в сикпе элементарны если их реализовывать не в лиспе
Нихуя. Из подобного могу вспомнить только дек, который на обычных указателях в каком-нибудь Си действительно проще реализовать, но и то, когда ты врубаешься, как использовать мутабельные пары вместо указателей, все встает на свои места.
>>1425905 Если с Си у тебя только опыт вката, то я бы не советовал его использовать. Часть заданий СИКПа подразумевает наличие уже готовых фич в языке (замыканий или динамической типизации, например), без которых полноценные решения будет сделать сложнее. Половину третьей главы ты на Си уже не сделаешь (там, где начинаются потоки, реализованные через ленивые вычисления), 4-ю целиком придется пропускать (если только ты не готов сразу написать на сишке полноценный интерпретатор лиспа). Короче, не мучай себя, выбирай питон.
Сверх люди подскажите плз как от >нам требуется доказать, что Fib(n) – это ближайшее целое число к φn/√5, где φ=(1+√5)/2 Приходят к >Fib(n) = (φn-ψn)/√5, где ψ=(1-√5)/2; Что ψn вообще такое и откуда оно берётся? Я думал я программирование учить буду, а не матан.
>>1428161 давай порассказывай мне про то что в школе учат. Хотя хз мб в каких-нить московских лицеях детишек и задрачивают. Мы даж на математической кафедре в нашей шараге золотое сечение и ряды фибоначи мельком проходили и ооооооочень редко оно потом ещё встречалось.
>>1428841 еслиб я хотел зарабатывать деньги поехал бы хуячить по вахте на севера или на завод к дяде пете. Всё лучше чем пилить говносайты и никому ненужные приложения на сосифон.
>>1404382 (OP) Ктонить знает как remainder работает? Что он делает я знаю а вот как он это делает?
>>1429003 >Что он делает я знаю а вот как он это делает? Как он находит остаток? Ты же про остаток от деления говоришь? Ну подумай, а как лично ты находишь остаток? Делишь делимое на делитель, а потом отбрасываешь дробную часть, умножаешь результат на делитель, вычитаешь полученное из делимого. Это первое, что приходит в голову. А соответствует ли это процессу, проходящему в компьютере, мне лично остаётся только догадываться. Но если в языках (например в пистоне) есть т.н. "целочисленное деление", то можно предположить что как-то так всё и происходит.
>>1429294 >а потом отбрасываешь дробную часть >Делишь делимое на делитель, а потом отбрасываешь дробную часть, умножаешь результат на делитель, вычитаешь полученное из делимого. чёт как-то не сходится. Да и отбросить дробь без ремаиндера не получится. Меня интересовала реализация именно на лиспе, не думаю что она прям на асмблере написана как сложение ну или как там на чём там кампилятор пишут
>>1429341 Почему я должен был подразумевать твоё место жительства, основываясь на одном только языке (ты пишешь по-русски), если в сшп том же русскоговорящих пруд пруди? А если бы ты оказался сыном / дочерью эмигрантов, и обиделся бы?
>>1429394 >Да и отбросить дробь без ремаиндера не получится Что-то мне подсказывает, что floor это всё таки низкоуровневая операция, но наверняка ты прав и есть какая-то лисповская её реализация, недаром же компиляторы лиспа умеют компилировать сами себя и недаром же были лисп-машины. Читай дальше, наверняка там потом будет. Заодно и мне расскажешь.
>>1429479 Мне тоже лень разбираться, но как я понял, remainder и quotient реализованы на си или асме, а более высокоуровневые функции (floor, round ...) уже на лиспе.
>>1429479 Про let дальше в книге объясняется, не помню, то ли в первой главе, то ли во второй.
Многие низкоуровневые операции в лиспах реализованы на нижележащем системном языке, читай - на C. Вот, например, низкоуровневая реализация remainder в Racket: https://github.com/racket/racket/blob/b133bea92e34f3e316711a51a8c485ff3715cbf1/racket/src/racket/src/numarith.c#L936 В четвёртой и пятой главах будет описано, как, имея произвольные примитивы для работы со списками, которые без разницы где и как реализованы, можно написать реализацию интерпретатора и компилятора соответственно. Дочитай до конца, базарю, ещё захочешь.
Всё таки хотелось бы узнать на чём вы прогаете. Пользовался https://repl.it/languages/scheme пока не встретился с remainder который он не распознаёт, список его собственных процедур не нашёл. Пересел на racket и чёт ахуел. Вначале от того что там надо выбрать язык. А потом от того что он 4 строки 30 секунд обрабатывает. Затем начались неприятности посерьёзней без begin он отказывался включать в тело несколько процедур. Теперь я столкнулся с проблемой, что он не даёт определить процедуру в теле другой процедуры и вот это уже пздц т.к. чтоб это обойти мне приходится писать в два раза больше.
>>1429685 Ты думаешь, что занимаемая ide память заисит от количества строчек в твоем файле?
>>1429692 Атом определенно относится к поколению "новомодных иде на электроне", которое до сих пор является новомодным. До этого были "новомодные иде на джаве", но сейчас они уже не новомодные.
>>1430054 Да быть такого не может. Я вышел в интернет с данным вопросом, така проблема не только у меня. Получше стало когда 86 версию поставил, но всёравно долго
>>1431119 А вот я думаю, что заслуживал. Он же наверняка даже русскую версию открыл после того собеседования, пробежался глазами и понимай он, что там пишут - стал бы хуесосить хрюшу, мол там нихуя интересного в книге нет, я все это умею, хуле он доебался? Но нет, он задает вопросы по книге, значит все-таки рыльце в пушку, ну или в говне, лол.
Посоветовали как более внятную современную версию SICP на JavaScript. Как думаете стоит изучать на нем? Книга полная более менее? Хотя бы основные главы полные? Пройдитесь пожалуйста глазами кому не сложно. Или идея максимально тупая? Просто прошелся глазами и охуел от оттого что на инглише мне более понятно о чем пишут чем в русском переводе оригинала.
>>1431427 >We need an appropriate language for describing processes, and we will use for this purpose the programming language JavaScript. Just as our everyday thoughts are usually expressed in our natural language (such as English, French, or Japanese), and descriptions of quantitative phenomena are expressed with mathematical notations, our process descriptions will be expressed in JavaScript. Блядь, они просто прошлись поиском и заменой?
>>1431427 >Хотя бы основные главы полные? Основные главы на месте, но я бы всё-таки взялся бы на твоём месте за оригинал, чтобы не пришлось потом рот мылом от JSговна отмывать
>>1431313 Так и представляю, как корзиночка, закончивший зажопинский колледж с отличием по специальности оператор ЭВМ, с ноги открывает дверь в московской гарант и с гордостью вываливает на стол свой диплом.
>>1431511 Ещё и понты гнуть начинает: в совершенстве владеют бэйсиком, владею Паскалем и делфой, знаю синтаксис асмы. Вы такого спеца хер где найдете ещё.
>>1431493 В моём рту знание элементарной хуиты уровня "ну карочи в скобках список из элементов чериз прабел, там ищё аператар впирёд можна паставеть" занимает очень мало места.
>>1431532 >>1431536 Какие запросы такая и вышка, у нас от фактических знаний почти везде ничего не зависит нужна либо корочка либо опыт работы и корочка либо знакомства.
>>1431588 Добрый вечер, а кто? Еслиб наш рынок реально бы требовал квалифицированных специалистов, то вузы бы их готовили никто бы просто не ходил в вузы, которые дают недостаточно для устройства на нормальную работу. Сейчас же пофиг куда ты пойдешь учится лиж бы корочку дали, а остальному на работе научат. В принципе я не считаю что это что-то плохое когда человек приходит на работу и его надо учить работать. Особенно сейчас когда постоянно все меняется. Как раз и нужно чтобы вузы делали человека максимально обучаемым. И с этим у нас в стране всё не так уж плохо. У технарей разумеется. Гораздо хуже то что кроме ит и менеджмента высшего звена у нас практически нет сфер где реально бы ценили специалистов.
>>1431720 >Добрый вечер, а кто? Ты не в курсе кто финансирует вузы в РФ? >б наш рынок реально бы требовал квалифицированных специалистов, то вузы бы их готовили Одно не следует из другого. Вот если бы заинтересованные лица лично лили деньги в этот процесс, тогда да. К остальному у меня нет вопросов.
ЗНАКОМОЙ ТРОПОЙ ВЕРНУСЬ Я ДОМОЙ Ну шо, был перерыв месяц, возвращаюсь к обучению. Прорешиваю хтдп первой версии, прорешал 25% вполне успешно, сейчас буду двигаться дальше.
>>1432597 Да, он самый. Сменил сикп на слоника, потом слоника на книжку с серой обложкой (в оп-посте есть ссылка), потом хтдп второе издание прошел на 20% и пришлось дропнуть, т.к. уперся в структуры и их очень плохо объясняли, теперь хтдп первое издание прошел на 25%.
>>1432605 Я уж думал, ты уже весь сикп прорешал и поднимаешь 300 к/сек. Ну удачи тебе, ОП. Надеюсь, теперь хдтп пойдёт. Твоему упорству можно позавидовать.
>>1432608 Видишь, я полгода только врубался и вникал, что такое программирование и с какой стороны в принципе подходить к обучению, метался от книги к книге и пр. Другие полгода уже более-менее учился и прорешивал, но с перерывами по месяцу-полтора, т.к. то мозги закипят, то своих дел накопится. Но дело не бросаю и сейчас все вполне получается. >Ну удачи тебе, ОП. Надеюсь, теперь хдтп пойдёт. Твоему упорству можно позавидовать. Спасибо, думаю не подведу :З
Приветик, ньюфаг и немного продвинутый в компах в треде. Решил вкатиться в программирование, ухнал про этот ваш SICP. Английский знаю на приличном уровне, поэтому думаю осилю.
Собсна, в чём вопрос. Обязательно ли решать задачи на Scheme? Можно ли читать SICP параллельно с документацией какого-нибудь питона/жабы/си? Или, может, тут нужен конкретно Scheme или конкретно функциональное программирование?
Бле всё я сдаюсь. За последние две темы не смог решить ни одной задачи самостоятельно. В лучшем случае я формировал решение на листочке, но не мог его сделать на шеме, тупа чего-то не хватает я думаю преподавателя, что б подсказывал и направлял. тупым я себя есно не считаю 212 по егэ не так уж плохо. И что за сверхразумы без образования тут самостоятельно всё это прорешивают мне не понятно Попробую хтдп чёт мне кажется я там ещё больше пососу т.к. английский слабовато знаю, а на русском не нашёл. Если не получится пойду смотреть видеогайды как сделать сайт.
>>1434019 Видимо стараешься хреново, раз на листочке всё нормас. На какой теме то хоть остановился? Совсем новичок в программировании? Просто мог бы на каком-нибудь другом языке тогда писать, если схема сложной кажется( хотя из всех функциональных легче неё не видел вообще). Ну или сюда в тред посрал бы. > 212 лмао > Попробую хтдп там не легче уже точно, возьми яйца в рот и продолжай sicp ,сука.
>>1434154 Не рекомендую HTDP и SICP. Код в обоих книгах представляет собой помои, написанные по бэд практисам. В продакшен такие портянки с дрисней не пошли бы. Обе книги расчитаны на скриптовых макак, в то время как программист должен изучать архитектуру компьютера и операционных систем, режимы работы процессора, работу программ на низком урове, PE формат и уметь пропатчить программу в hex-редакторе.
>>1434495 >В продакшен такие портянки с дрисней не пошли бы Как раз потому, что код чересчур "умный", в продакшене нужен код в который не надо вникать по три часа. А в обучении заебись. Нахуй не нужны человеку на начальном этапе бест практисы и паттерны. Реверансв сторону жс вообще ни к селу ни к городу.
Чушь собачья. Основная проблема в разработке ПО - это сложность больших программ. СИКП учит справляться со сложностью разными способами - начиная с абстрагирования элементов программы и заканчивая разработкой языков, на которых решение и формулировка задачи оказывается проще и понятнее. Какие у тебя претензии к коду в СИКПе вообще не очень понятно. Код там предельно ясный. Единственная претензия, которую к нему можно предъявить - местами он не оптимален, но авторы и сами об этом говорят.
>>1434209 >раз на листочке всё нормас Если бы, вот за последних 2 темы было 12 заданий "на листочке" я смог сделать 2 или 3 >На какой теме то хоть остановился? Процедуры в качестве аргументов Самое херовое, что код для меня минимум читабелен, даже чтоб просто разобрать решение у меня уходит дохера времени. Что бы понять что делает строка надо держать в уме весь код потому что постоянно ссылается одно на другое и что либо упустить очень легко. И при таком раскладе сделать что-либо самому без тупой копипасты для меня становиться нетривиальной задачей. Упражнение 1.29. Вроде элементарная задача. Я блядь даже несколько способов придумал, но пытался реализовать в первую очередь те что были максимально близки к примеру из темы. И вот на элементарный пример угрохано ДЖВА часа и хуй, а потом ещё минут 30 разбирал пример. Непонятно толи моё решение в принципе не правильное то ли просто где-то зарылась ошибка в понимании работы самого языка. И спросить негде. Тоесть я конечно могу засирать топик по каждой мелочи или там найти какойнить форум или канал для этого. Но блджадь этож всё столько времени. Насколько легче было еслиб я подошёл к кому-нибудь, показал что я сделаль и он бы хотяб сказал давай по новой вообще мимо или бля норм ты только не там процедуру определяешь. А так какой смысл от это сикпа будет если я его осилю только лет через 5? Ладно чёт неосилятор разнылся. >>1434154 А в чём разница?
>>1434523 >А в чём разница? Они сначала первую версию выпустили, а несколько лет спустя переиздали. Так вот я вторую прорешивал, уперся в структуры - их откровенно по уебанскому описывают. А первую сейчас решаю, прям очень сильно сложилось впечатление, что намного подробнее и лучше объясняют материал. оп
>>1434523 >надо держать в уме весь код потому что постоянно ссылается одно на другое и что либо упустить очень легко. Добро пожаловать в бытие программистом, таким на работе ты будешь заниматься по 8 часов в день 5 дней в неделю, и ещё начальник будет стоять над душой и орать, хули ещё не готово.
> Тоесть я конечно могу засирать топик по каждой мелочи или там найти какойнить форум или канал для этого. Нутк пиши сюда в тред, тут всё равно почти никого нет, кроме опа и залётных троллей. Или в тележке пиши в @scheme_ru, там будут рады любой активности.
>>1434679 >имплаинг не ясный Сначала гуглю что значат квадратные скобки, узнаю что это псевдоним для обычных скобок.
Функция под названием small, принимает на ввод l и t если l пустой вернуть пустой список иначе если первый элемент l (уже понятно что l значит list) меньще t Гуглю что значит cons, узнаю что оно строит пары (пары != списки)
сделать пару из первого элемента l и результатов функции small, которой передан список l но без первого элемента и t иначе (если первый элемент l больше t) просто вызвать small как в первом условии, только без создания пары. На выходе должен получиться список (не уверен, но википедия намекает что именно список), состоящий из всех элементов l меньших t
Если бы я читал книгу, а не мимо проходил, то и гуглёж бы наверное не понадобился (если книга хорошая)
>>1434523 Ты не осилил предыдущие темы. Помню K&R читал разбирал каждую букву. Потом сам себе придумывал задачи, в итоге я решал сам прорешалто что приводилось в каждой главе в конце не подглядывая и часто залезал в последующие главы если мне чего-то не хватало. Что-то упустил.
Блин, а этот недетерминистский интерпретатор не так прост. Т.е. я разобрался и понимаю, как он работает, но не уверен, что смог бы сам додуматься до такого же простого и красивого дизайна.
Привет, двач. Мамкин вкатывальщик в треде. В ближайшее время хочу начать вкатывание, отрубить телефон со старой работы, съебать в деревню (энторнет там ловит) месяца на 3, взяв с собой томик Кнута и СИКП. Планирую задрачивать в режиме сон-еда-учеба. Есть ли смысл покупать платный акк на codeacademy? Когда из меня выйдет что-либо подобное на junior'а? В какой язык следует вкатываться - C++, Python или наоборот следует брать какие-то экзотические вещи типа Haskell? Как восполнить дефицит матана и прочей хуйни (у кореша нашел книгу некого Зельдовича "Высшая матетматика для начинающих")? Английский шарю свободно.
>>1438318 Можешь столкнуться с такой проблемой, как у меня, когда через месяц активного обучения просто мозг закипит и следующий месяц не сможешь заниматься. По языкам не проконсультирую, т.к. сам еще не вкатился. Платные аккаунты считаю полной хуйней. оп
>>1438487 Да, еще допишу, когда с полным погружением в дело уходил, я спал 2 раза в день, часов по 5. Потому что если спишь один раз, проснулся, несколько часов позанимался, мозг устал и уже до отбоя половину дня ты не занимаешься. А когда спишь 2 раза в день - 5 часов поспал, несколько часов позанимался, мозг закипел, может часок хуетой позанимался и спать лег, во сне мозг отдохнул ну и так далее. Короче максимальное погружение, но, повторюсь, что мозг потом сдается и месяц, а то и полтора просто не подходишь к обучению.
>>1438318 Выбери технологию, Почитай Петцольд "Код" потом или паралельно когда уже что-то поймешь приступай к основам языка и постоянно практикуйся двигаясь вперед, не пытаясь понять все сразу, книгу по языку как худ. лит. не читай, юзай как справочник.
>>1438506 Т.е. learning через doing? Писать helloworld и постепенно усложнять или поставить задачу по написанию желаемой программы (например бот в телеге) и постепенно въезжать как он пишется?
Книгу начал читать - до чего люблю американских авторов, пишут, чтобы ты понял, а не для того, чтобы "ой какой я умный, какую пиздатую книгу написал".
>>1438487 Ну я планирую поставить себя в безвыходную ситуацию. Отрубить телефон и контакты с внешним миром. Будут заканчиваться деньги и это станет стимулом лопатить дальше. В принципе - у меня и сейчас такая работа, что иной раз мозги в трубочку сворачиваются, много информации, сложные гуманитарные абстракции (я юрист лол).
>>1404382 (OP) Посоны, поясните что за SCIP и кому он полезен. Я начал читать книжку, там все примеры на языке lisp. Что я знаю про lisp? Что это древний язык, который ни где не используется. Очевидно, у этого языка, как и у любого другого, есть свои особенности синтаксиса и заточен он под что-то определенное. Возникает вопрос: можно ли извлечь из SCIP пользу программисту независимо от используемого языка и области разработки?
>>1438942 Да, примерно так. После прочтения книги Петцольда начинай учить основы программирования и лучше всего начать с С, потом С++ только классы что бы понять ООП, а дальше переходить на желаемую технологию делать что-то более реальное.
>>1438943 Попробуй, только отпишись потом, не поставил ли мозг тебя в безвыходную ситуацию - "пиздуй дворником мудило, но в ближайший месяц по программированию меня не трогай".
Ок, но почему все говорят про SICP, хотя там, как выше указывалось - используется ЛИСП, в котором как я понял нет такой хуйни как "переменная", но вроде как есть целая глава ООП.
>>1439113 Нахуй не нужен этот си. Убогое говно, которое костылями допиливали до си+, в котором тоже было дохуя говна и допилили до крестов, кресты из-за массы костылей и допиливаний тоже является уебанским и тупорылым говном.
>>1439152 И тем не менее основы (циклы, условия, функции, переменные) лучше изучать на примере С, а не Джавы, где сразу непонятные классы и не дай Бог JS.
>>1439155 Вроде тред про лисп, а ты чешешь про яву и js >>1439163 Сходи в их тред, там почитай. И определись уже, что делать будешь. Сикп решать или си изучать.
>>1438973 >Очевидно, у этого языка, как и у любого другого, есть свои особенности синтаксиса У этого языка особенностей синтаксиса намного меньше, чем у любого другого существующего языка, потому что почти весь синтаксис лиспа - это ( (открывающая круглая скобка) и ( (закрывающая круглая скобка), что, в общем-то, и позволяет сконцентрироваться на изучении фундаментальных вещей, не отвлекаясь на разную синтаксическую мишуру.
>>1439230 Да, гетерогенность - это то самое, что мейнстримные языки пока ещё не осилили спиздить из лиспов. Разве что в Ruby что-то такое смутно есть, но вроде как извращённое.
>>1438318 Хоть и поздно, но вставлю свои 5 копеек.
Покупать платный акк смысла нет. И вообще, прежде чем покупать какой-то курс хорошо поищи нет ли его уже в открытом доступе слитого. Сейчас очень много курсов можно смотреть бесплатно.
У каждой компании понимание лычек (джун/мидл/синьер) разное. Некоторые могут взять и совсем начинающего, если заметят что способный к обучению и тебе нравится то, чем занимаешься. Но в любом случае надо хоть что-нибудь уметь в выбранной сфере. Изучаешь основы - идешь штурмовать собеседования. Минимум по срокам я бы сказал 6 месяцев. Максимум, наверное, года 1,5 из того, что лично знаю.
Язык - это инструмент. Выбрав первый язык программирования не обязательно потом на нем сидеть всю жизнь. Поэтому я бы порекомендовал, чтобы не было проблем найти работу, брать что-нибудь мейнстримовое на первое время (JS, PHP, Python). Это для работы. Для обучения - СИКП с схемой самое то. Проходишь первые 3 главы. Дальше садишься за книги "Код", "Идеальный программист" и выбираешь чем будешь заниматься. Я сам js разработчик, поэтому по php, python не подскажу. Но, если это веб, то независимо от языка проще будет начать с курсов той же html academy по верстке - там будут базовые знания по html/css. JS лучше разбирать не у них, а по learn.javascript.info. Как будешь на этой стадии проблем что разбирать дальше не возникнет, думаю. Если все же будут вопросы - пиши.
На начальной стадии матан практически не нужен. Уже когда разберешься с базой можешь засесть за алгоритмы (лучше начать с "Грокаем алгоритмы", а не Кнута).
За английский большой + тебе. Некоторые могут взять средненького кандидата только из-за того, что он неплохо прокачан в инглише.
Спасибо тебе, анон. Я не ухожу с треда, т.к. планирую описывать свой процесс вкатывания, чтобы другие аноны могли это наблюдать в режиме рил-тайм.
В общем начинаю разрабатывать план своего обучения, очень много дельных советов поступило. Чуть позднее сброшу, как я себе описал детальный план вкатывания.
Слепая печать у меня развита. Я пишу тебе сейчас с MacBook на котором нет русских клавиш.
Открою тебе тайну, только никому не говори. У всех самых крупных IT-компаний есть собственные исследовательские лаборатории. И у всех есть секретный исследовательский отдел, который днями и ночами пытается написать на Scheme интерпретатор языка Бога. Абельсон и Сасман закодировали в СИКПе ключ к созданию такого интерпретатора и вот уже 40 лет тайное общество программистов пытается его расшифровать. Истоки уходят корнями в Ветхий Завет. Создав такой интерпретатор, мы сможем напрямую говорить с Богом. Получим огромную власть. Но даже сейчас у нас все схвачено. В любой крупной компании руководящие места давно занимают лисперы. Приняв обет и вступив в общество тебе открываются все двери. В любом городе тебе дадут лучшую гостиницу. Любые женщины будут твоими. Счета в банках с десятью нулями на конце. Но ты должен прорешать СИКП целиком и посвятить свою жизнь служению великой ЛИСП-машине и построению интерпретатора языка Бога. В качестве вступительного экзамена попросят доказать, почему алгоритм решения задачи о размене монет (SICP 1.2.2) корректен. Потом надо будет придумать язык для работы в заданной предметной области и написать его интерпретатор - ты должен быть металингвистическим программистом. Наконец, надо принести клятву верности: я отдаю свою жизнь служению ЛИСП-машине и созданию интерпретатора языка Бога. Вечная слава пророку Маккарти!
>>1441402 Только с ним - будет трудновато. Читай пасту "высшее образование в IT своими руками v2", там подробно описано про то, как вкатиться хоть на 300к+.
А я напоминаю, что ваша книга говно и не имеет ничего общего с реальным коммерческим программированием. Уже жду ваших проекций и поисков формошлепов-вебмакак под кроватью.
>>1442490 > поисков формошлепов-вебмакак под кроватью Че их искать? Я формошлеп-вебмакака. На работе есть кадры, которым бы не помешало прорешать половину книги, т.к. строить нормальные абстракции они так и не научились. И с реальным коммерческим программированием на том же js она имеет точки соприкосновения.
Но в плане того, что из нее сделали культ (типа книга книг) - тут я не согласен. Эта книга всего лишь часть обучающего процесса, а не вещь, которая заменяет собой все другие источники.
>>1443206 >Можешь все задачи из книги делать на любом функциональном языке В прямом смысле? Допустим если я хочу выучить в будущем С или питона какого нибуть, мне поможет эта книга?
>>1443210 Эта книга не для изучения языков, а для тех, кто уже осилил хоть 1 функциональный язык. Я бы рекомендовал любой ML по вкусу, окамл, хачкель и т.д. >>1443211 Лисп это простой язык для парсинга компилятором, а в реальности люди не мыслят стековой архитектурой и ломают глаза на кучи скобок.
>>1443212 >Эта книга не для изучения языков, а для тех, кто уже осилил хоть 1 функциональный язык Спасибо, мне почему то казалось что эта книга наоборот для абсолютных новичков что бы познать фундамент програмирования.
>>1443348 Ты возвращайся, когда ознакомишься с логикой и поймешь, что аргумент по аналогии не состоятелен.
Сука, нахуя вас крестьян читать и писать учили, чтобы вы такую хуйню писали, ничего в жизни не прочитав достойного? Жаль впустую потраченные часы твоего учителя по родному языку мимо
Ну что, 11 июля я вернулся в обучение после месячного перерыва. Собственно через 2 дня из обучения обратно выкатился, лол. И до сих пор нихуя не делаю. Но тупо времени нет, исключительно поэтому. Такая вот хуйня.
>>1446404 Я вот таким же занимался как и ты. А потом понял, что важно как можно быстрее устроиться на работу, как можно скорее начать решать реальные задачи. СИКП можно и попутно изучать. Что толку от него, если не решаешь продакшн задач и не можешь программировать за деньги? Тебе не кажется, что ты тратишь время в пустую? Так можно и 10 лет обучаться, но так и не начать писать код за деньги.
Классный инженер, с математическим образованием, пробовал разные языки, в том числе Haskell (что крайне редко встретишь среди пхпшников, тем более тех кто использует битрикс). При этом стремится к эффективности, простоте. Поэтому я тоже решил поумерить аппетиты, и писать хоть на чем, лишь бы за деньги, хоть вордпресс использовать. Поюзав немного пхп, поюзав го, таки понял, что самая быстрая и эффективная разработка будет с рельсами.
Рельсы хороши тем, что руби простой, кроме рельс почти ничего не юзают, а это значит, что не нужно распыляться на разные фреймворки как в пхп. Рельсы работают за тебя, куча автогенераций, готового кода, что очень ускоряет и облегчает разработку. Все проекты на рельсах устроены одинаково, это значит, что изучив один проект на рельсах, будешь знать как устроены все другие проекты, и не составит труда влиться в любой новый проект. Руби сейчас не пиарят, говорят что умер, это еще один плюс, мало конкуренции. Ну и один из самых больших плюсов это отличное сообщество.
P.S. На всякий случай, это я писал вот этот пост. >>1446424 Даю как бы отчет, что собираюсь делать я, чтобы начать писать за деньги вместо пустого академического программирования.
Пацаны, объясните, а чем полезна вся эта тема для человека, который будет всю жизнь кодить на питоне, на сях, на сях с плюсами, жабаскрпте и тому подобных?
>>1446835 > СУКА ДА ЧТО Я ДЕЛАЮ НЕ ТАК! Ты то, что возвращает твой make-interval пару (13.2 . 14.0) пытаешься вызвать, как функцию, что, конечно, невозможно: 13.2 - это число, а не функция. Присмотрись, вокруг let одна пара круглых скобок лишняя.
>>1446424 Да нет, вроде бы не в пустую трачу время. Просто есть такие дела, что нихуя не отложишь, а там уже сикп решать (хтдп, как в моем случае), js или еще что, какая разница, если один хуй времени нет.
>>1447270 Ты начнешь строить хорошие абстракции в коде, что сэкономит много времени и нервов, особенно тем, кто будет твой код читать и поддерживать. Еще книга заложит понимание функционального программирования, расскажет про основу объекто-ориентированного подхода, объяснит тебе в чем сложность программ и как с ней бороться. Это первые 3 главы. Если продолжишь читать дальше, то поймешь как и с какой целью создаются интерпретаторы языков программирования.
>>1447580 Ну работает он в компании где пилят Битрикс, что с того? Чувак закончил физмат, имеет большой опыт программирования на разных языках (в том числе Хаскель и т.п.), шарит в парадигмах, реализовал много крупных проектов. А чего добился ты? Дрочишь хеллоуворлды небось за бесплатно.
Не понял, чем тебя не устраивает load. У тебя и будут доступны все функции загруженного модуля по их именам. Или ты хотел, чтобы к ним можно было обратиться через имя модуля?
>>1448139 Ну да, либо при импорте можно было задавать имена функциям, чтобы не было конфликтов имен и сразу было видно, что именно импортируетя. Ну как import в javascript.
if (and (> b a) (< b ( a b))) (if (and (> b a) (< b ( a b))) b a)
Правильно ли я понимаю, что на русский язык выражение переводится как: - если одновременно является верным, что ("в" больше "а") И (В меньше произведения АВ) то В получается значение А?
В это случае я не догоняю - почему компиллятор на компе вычисляет выражение этой хуйни как 16:
cond ((= a 4) 6) (cond ((= a 4) 6) ((= b 4) (+ 6 7 a)) (else 25))
Ведь cond дает в качестве ответа последнего вычисленного выражения, т.е. он считает ((= b 4) (+ 6 7 a)), где значение a= b = 4.
Правильно ли я понимаю, что на русский язык выражение переводится как:
если одновременно является верным, что ("в" больше "а") И (В меньше произведения АВ) то В получается значение А?
В это случае я не догоняю - почему компиллятор на компе вычисляет выражение этой хуйни как 16. Почему он использует значение А = 3, если в строке с if мы дали ему значение B, которое равно 4?
>>1448396 Тебе важно понять, что в лиспах нет болезненного деления на statement и expression, как в других языках, в лиспах всё - выражение, даже небо, даже аллах, даже if на третьей строчке по твоей ссылке, который никуда не возвращает своё значение (a или b, в зависимости от условий), и, как следствие, бесполезен.
Заняло три часа, чтобы прочитать предисловие. Такого количества жаргона и заумных слов я не встречал еще ни в одной книге. Как люди в 90-х и 00-х это читали? Что, например, значит, "As in every other symbolic activity, we become convinced of program truth through argument."? Или "The discretionary exportable functionality entrusted to the individual Lisp programmer is more than an order of magnitude greater than that to be found within Pascal enterprises."? Может быть я просто слишком тупой?
ответ1 = xx, если x>y>z yy, если y>x>z z*z, если еще что-то
ответ2 = примерно то же самое только действий по сравнению 2.
Вопросы:
- какого хуя в ответе получается 162, а не 81+25=106 - как можно использовать cond в этой случае, ведь нужды сравнивать 2 раза нет, мы уже выяснили самое большое число, получив ответ1.
(define x 3) (define y 5) (define z 9) (+ (if (>= z x y) ( z z) (if (>= y x z) ( y y) ( z z))) (if (>= z x y (and (>= y x z))) ( x x) (if (>= y z x (and (>= x z y))) ( y y) ( z z))))
(define (sum-of-squares a b) (+ (square a) (square b)))
// почему не нужен отдельный (define (square b) ( b b)?
(define (sum-of-biggest-squares a b c)
// вот здесь он вводит выражение, смысла которого я вообще не понимаю, но попробую перевести на человечий язык: - "я ввожу переменную sum-of-biggest-squares", но почему он пишет "a b c", по моей логике - он должен еще до этого сделать (define c), а после sumofsquares должна открыться скобка и сразу cond
(cond ((and (>= a c) (>= b c)) (sum-of-squares a b)) ((and (>= a b) (>= c b)) (sum-of-squares a c)) (else (sum-of-squares b c))))
>>1449062 мдэм... если конечно я правильно понял твои вопросы Вначале он пишет процедуру квадрата, которую потом вызывает в процедуре sum-of-squares. В лиспе переменных нету, есть формальные параметры, которые используются в процедуре и перечисляются после имени процедуры.
>>1449062 ещё замечу что я это задание писал одной процедурой. Эт уже там профессиональная деформация у автора пошла он всё готов на процедуры разложить что вообщет является полезным навыком одним из-за которых мы эту книгу и открываем
>>1448872 Ты просто хуёво английский знаешь symbolic activity - активность, связанная с манипуляцией символами/текстом argument здесь - глагол "Как и в любой другой активности, связанной с символами, мы убеждаемся в истинности программ с помощью рассуждений" Ну и так далее. Читай русский перевод, он хороший только опечаток в нём дохуя
>>1449062 >- "я ввожу переменную sum-of-biggest-squares", но почему он пишет "a b c" Потому что это не определение переменной, а определение функции. NOTE THE DIFFERENCE IT COULD SAVE YOUR LIFE
(define test 42) ;; переменная, изначально равная 42 (define (test) 42) ;; функция без аргументов, которая всегда возвращает 42 Камон братюнь, ты первую главу, где основы синтаксиса объясняют, жопой читал?
>>1449754 >define (test a b c) (y) >- означает "я определяю функцию "test" со значениями a b c способом y" и вместо y может быть уже что угодно. Сорян, но нет. Во-первых, не "со значениями", а "с аргументами". Во-вторых, то, что ты написал, это (define (test a b c) (y)) с учётом того, что "способом y" означает "вызвать функцию `y` без аргументов и вернуть её результат". Не за что, обращайся, если что.
>>1450468 Ну, если ты пишешь хуйню, то лисп может очень сильно ускорить этот процесс. И резко повысить качество хуйни. Есть даже шанс получить в результате не простую, а ёбаную хуйню.
>>1450509 >говорят, строк кода выходит меньше и типа за счет этого проще Как-то толсто выходит. Хотя, это же лиспотред.
(define (cont-frac n d k) (if (= k 1) 0 (/(n k) (+ (d k) (cont-frac n d (- k 1))))))
как эта хуйня работает? ротебал этот лисп до него у меня не было такого чтоб я писал код и не понимал как он работает. Сука я это почти наугад писал ебаны врот
Накатил префэс и дальше не читал, ибо нахуй не надо Блять какие-то абсракции, эстетика погромирования нахуй, живые организмы и пирамиды... пизздос какойта чё за ебанаш писал всё это? Вернулся к КерРитчи - лучшей хрестоматии для современного программиста
>>1453566 >Что плохого в объявление в бранче? Почему это говно мамонта ругается на меня? Откуда вы вообще такие беретесь. Половина треда вопросов по задачам уровня средней школы, один не осилил функцию в две строки, еще один возвращает определение переменной в функции, еще и в ветвлении, лол Ты в плюсах и джавах тоже после return объявляешь переменные? Весь тред хуйни из первой главы, какой же пиздец
>>1453570 Я же извинилсячто тебе ещё нужно? >объявляешь переменные? А предположим, я имел в виду присвоение? Ведь в контексте лиспа это разве не одно и тоже?
>>1453574 >Я же извинился Я уже после увидел >А предположим, я имел в виду присвоение? Ведь в контексте лиспа это разве не одно и тоже? Я даже хз, что на это ответить Мало того, что объявляя переменную в операторе ветвления ты неявно подразумеваешь, что ее вообще может не существовать, так она еще и не будет доступна вне cond, потому что есть такая вещь как область видимости Ну и третье: функция в лиспе должна возвращать какое-то значение, define не возвращает ничего - он связывает какое-то значение с каким-то именем И это справедливо что для этого говна мамонта, что для любого другого яп высокого уровня
>>1453542 блин эта процедура работает не так как надо по крайней мере, для других задач мне пришлось другую написать потому что эта давала неверный результат, ну или я где-то наконясячил, но когда переписал эту процедуру всё заработало . Но почему то даёт верный результат в данном упражнении. Больше всего меня добило что ответ не зависит от того будет там 0 или мамка вот этого токсика >>1453416 >>1453570
>>1458733 Ты же понимаешь, что не все, что стоящее становится популярным. Как и не все, что популярное - офигенное. Причем в любой сфере. Программирование - не исключение.
Лиспобояре, помогите разобраться с аппликативным порядком. Если его суть в том, что сначала вычисляются аргументы функции, а потом уже вызывается сама функция, то понятно, почему виснет пример с рекурсивным вызовом (p). Но совершенно непонятно, почему в обоих моих примерах не вычисляется деление на ноль.
>>1460305 > Но совершенно непонятно, почему в обоих моих примерах не вычисляется деление на ноль. c чего ты взял, что оно не вычисляется? Оно вычисляется, просто интерпретатор которым ты пользуешься скорее всего не кидает ошибку при делении на ноль, я думаю, что в y просто лежит +бесконечность. Хотя конечно стоит заметить, что в дефолтной реализации схемы от мита при делении на ноль кидалось исключение.
>>1405373 ООП -- это надстройка над императивщиной, и иначе ее воспринимать не стоит. Вот взять, например, плюсы. Что можно сделать в плюсах, чего нельзя сделать в си? Методы? Есть функции на указатели. Наследование? Можно засунуть тип A в структуру B, это почти что наследование. Инкапсуляция -- всего лишь защита от дурака, которая не работает, потому что язык слабо типизированный (хотя это конкретно проблема плюсов, а не ООП). Полиморфизм -- не уникальная для ООП фича, но это единственное, что фундаментально отличает ООП от ИП. Так что мой безусловно дилетантский совет -- относись ко всему, кроме полиморфизма, как к синтаксическому сахару над ИП, это сильно упростит тебе понимание ООП.
>>1466566 Да так то ничего, просто плюсы это набор костылей над байтоебством, которые вместо того, чтобы решать проблемы байтоебов, создают еще больше проблем. А если серьезно, это была просто неудачная формулировка, если бы ты дочитал мое сообщение, ты бы понял, что я не считаю, что ИП может заменить все фичи ООП. Не все, но многие.
>>1466548 >Что можно сделать в плюсах, чего нельзя сделать в си? RAII-контейнеры, рекурсивные шаблоны. Твое самое большое заблуждение, что ты считаешь кресты ОО-языком. А кресты переросли ООП примерно тогда, когда в них добавили STL, автор которой противник ООП. Т.е. в начале 90-х. >Инкапсуляция -- всего лишь защита от дурака, которая не работает, потому что язык слабо типизированный Инкапсуляция делается на си элементарно, более того, она есть в стандартной библиотеке. Структура FILE существует, но у тебя к ней нет доступа, потому что экспортируется она только в виде указателя и доступна в виде "методов" с "конструктором" fopen. Другой вопрос, что это приводит к тому, что без обязательной аллокации в куче ты хуй что инкапсулируешь, это тебе не private в хедере написать. >потому что язык слабо типизированный Щито. >Полиморфизм -- не уникальная для ООП фича, но это единственное, что фундаментально отличает ООП от ИП. Если отвечать в твоем стиле (когда ты хуйню методом десятка костылей называешь "нууу, можно зделоть"), то полиморфизм на си делается подобным же образом.
Другой вопрос, что с подобным петушением ты помощи от системы типов не дождешься, поэтому это и не ООП.
>>1466575 >Да так то ничего, просто плюсы это набор костылей над байтоебством, которые вместо того, чтобы решать проблемы байтоебов, создают еще больше проблем. Это от си была куча проблем, включая buffer overflow и format strings в любом сетевом приложении в нулевых.
Где скачать SICP?
На русском: http://newstar.rinet.ru/~goga/sicp/sicp.pdf
ориджинал: http://web.mit.edu/alexmv/6.037/sicp.pdf
https://github.com/sarabander/sicp-pdf/raw/master/sicp.pdf
Где я могу писать свой код, для выполнения заданий?
Онлайн редактор, с поддержкой Scheme: https://repl.it/languages/scheme
IDE для racket подобных языков(но есть и поддержка Scheme, но её нужно включить) - https://racket-lang.org/
Где посмотреть ответы на задачи?
http://community.schemewiki.org/?SICP-Solutions
https://github.com/qiao/sicp-solutions
https://wizardbook.wordpress.com/solutions-index/
Где посмотреть видео про книгу?
https://www.youtube.com/watch?v=a0YrCABCOEY
Предыдущий тред https://2ch.hk/pr/res/1320096.html