Это копия, сохраненная 2 октября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Где скачать 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 (М)
Где я ещё могу пообсуждать любимый SICP, кроме двача?
https://www.reddit.com/r/compsci/
https://www.reddit.com/r/learnprogramming
Полезные ресурсы:
https://teachyourselfcs.com/
https://github.com/ossu/computer-science
https://sicp.neocities.org/
Книжки по ФП
https://www.dropbox.com/sh/ugtfwgfilgr0ebu/AABVDeYpTvcqcg22XZnYT8Eca?dl=0
Заодно еще пара ссылок (на онлайн-версию, видосы и сикп на кложе):
clj: http://www.sicpdistilled.com/
1986: https://www.youtube.com/playlist?list=PL8FE88AA54363BC46
2004: https://www.youtube.com/playlist?list=PL7BcsI5ueSNFPCEisbaoQ0kXIDX9rR5FF
harvey: https://archive.org/details/ucberkeley-webcast-PL3E89002AA9B9879E?sort=titleSorter
html: http://sarabander.github.io/sicp/
По просьбам трудящихся еще 3 ссылки
https://htdp.org/2018-01-06/Book/part_prologue.html - как работает ракета
http://sicp.sergeykhenkin.com/
https://docs.racket-lang.org/sicp-manual/#(part._.Installation)
Для изучения языка-схемы порекомендую первые две главы 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.
Различия не принципиальные сейчас, всего-то коэффициентов добавили в формулу убрали, но настораживает, что будет дальше?
Да, там есть такие хуй-пойми-к-какой-телеге различия. Лучше читать оригинал, а если что-то непонятно - перечитывать на русском, например.
>Сначала читал оригинал, потом переключился на русский перевод и натолкнулся на различия в русской и оригинальной книгах, когда проверял ответы к задаче 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-е издание держу в руках...
Да, это опечатка/ошибка набора, каковых в русском переводе дохуя. Сам перевод хорош, но вот эти тупые опечатки всё портят. Иногда мне кажется, что финальный текст русского перевода заставили набирать пучок студентов за зачёт по ЯПМТ.
Уась, большинство мейнстримных языков являются типа ООП-языками (Java, C#, Python, Ruby, PHP, C++). Хочу найти пособие как на них писать, используя классы, интерфейсы, - вот это вот всё. Только руководство хочу в духе СИКП и HTDP.
Ну в хтдп есть целая глава про это, например. Little typer еще какой-нибудь наверни, если от MIT Press хочется.
>Ну в хтдп есть целая глава про это
Про что? Я просто не читал, читал только СИКП.
Мне нужно не просто теорию ООП, а то как писать на языках вроде C#. Именно практическое руководство. И чтобы авторы были адекватные инженеры, с опытом и в ФП и в ООП. Не читаю авторов, которые пишут "ООП это абстракция, наследование, полиморфизм". Скорее всего такие авторы не понимают ООП, и не понимают как писать на языках с классами, а просто повторяют заученные слова.
В СИКП к примеру отсутствует такое, нет аксиоматизма, догматизма, фанатизма, вместо этого просто показывают как можно элегантно решать задачи без лишних абстракций. В большинстве книг по ООП все наоборот. Стараются слепо верить догмам, вводить как можно больше абстракций, смещая фокус с решения задачи на следование глупым догмам. Такой фанатизм меня раздражает.
Адекватный автор должен показывать как решать задачи используя классы, какие задачи так лучше решаются, в каких случаях такой подход неудобен, и показывать альтернативу, сравнивать с ФП.
Не знаю, но от чувака, который настоятельно рекомендовал SICP можно было услышать, что вторая обязательная для прочтения книга - Code Complete. Только в начале там много воды и не стоит забрасывать ее из-за этого.
>Про что?
Про состояние и объекты: https://htdp.org/2003-09-26/Book/curriculum-Z-H-1.html#node_toc_start
>просто показывают как можно элегантно решать задачи без лишних абстракций. В большинстве книг по ООП все наоборот
Ну как бы ООП - это чисто маркетолухная шешура, кроме этих самых догм там ничего как бы и нет. Анон, очнись, 95% кодеров на джаве генерируют в своей идешечке геттеры и сеттеры для каждого дата-класса, потому что "ну бля инкапсуляция епта ооп это же инкапсуляция я на рсдн так прочитал а ты кто воще такой".
>показывать альтернативу, сравнивать с ФП.
Предлагаю тебе прочитать книжки Егора Бугаенко - там нет никаких альтернатив и никакого сравнения, там как раз максимально фанатичный (и весьма неортодоксальный) взгляд на ООП. А потом самому сравнить и сделать выводы (цель книги именно такая) - раз ты сикп прочитал, то у тебя достаточно знаний и навыков для этого.
Все задачи решаешь? Я немного и не понял: ты читаешь SICP, а советуешь HTDP?
Алсо, тоже начал сегодня читать. В ленивом темпе 17 задачек прорешал(немного вру, ибо половину "устных" задач пропустил), это 59 страница из 596.
Нет, он пробовал sicp, little schemer (слоник) и еще что-то - ему не зашло. Теперь занимается по htdp.
Раз пошла пьянка с отчетами, напишу и я свой, который никому нахер не вперся.
Прорешал первые 3 главы SICP. Вцелом неплохо, местами интересно, местами материал был и так известен (формо-крудошлеп я), местами упражнения подзаебывали. Могу поставить за эти главы 4 звезды из 5 (так как не понял от чего весь этот культ вокруг книги, возможно были просто завышенные ожидания). Но для вправки мозгов годится.
Пока откладываю ее в сторонку и буду дочитывать оставшиеся книги из списка, который Кирюша-хекслет составлял. Потом надо будет работку сменить, и уже после, возможно , вернусь и буду писать свой интерпретатор, проходя 4 и 5 главы.
Я же после SICP'а хочу Кострикина прочитать, хотя бы первые две книжки, как в ШАДе советуют, а помимо него Зорича с Демидовичем. Зорича немного читал, как и Кострикина. В принципе, ничего сложного нет, но на это нужно много свободного времени.
После хочу плотно заняться алгоритмами. "Грокаем Алгоритмы" я практически всего осилил, мне даже было скучновато, а вот с Корменом уже посложнее, там тупняки на пару часов.
Можно параллелить всё это дело, конечно же.
А интерпретатор/компилятор я скорее всего тоже не буду писать, если я захочу его запилить - я открою магическую книгу дракона.
Реквестирую книги по программированию на scheme. Не сам sicp, а именно про scheme.
Я решаю первую версию htdp; вторая версия не пошла, т.к. структуры там слишком по уебански объясняют, точнее вообще почти не объясняют. sicp совсем не пошел, т.к. я вообще с полного нуля пытался ее решать. Задачи решаю все, некоторые не получаются, но не из-за моей тупости, а то, что просто не могу понять, что от меня хотят - сложности перевода с инглиша.
>>09592
Первая версия htdp. Говорю это как человек, который до нее пытался сначала sicp, потом зеленый слоник, потом книжка со второго поста в этом треде - в самом конце поста, потом htdp второй версии и только после них, пятой книгой была htdp первой версии, которую тебе и советую.
Да, для самого начала можно первые 2 главы той книги, со второго поста прочитать. А дальше там идет углубление в сам язык, а не в обучение программированию.
Мимо ОП вот этого корявого треда: https://2ch.hk/pr/arch/2017-04-25/res/903354.html (М)
Звучит прикольно, согласен. Я к тому, что не из-за тупости в программировании, а из-за тупости немного в другом :З
>Где я могу писать свой код, для выполнения заданий?
А есть смысл брать упражнения сикп и выполнять их на другом языке программирования?
Где-то натыкался на такое мнение, что SICP идет очень тяжело потому, что с определенного момента требует знаний по теме (в частности математику). Что там еще желательно параллельно осиливать чтобы освоить книгу?
Мало смысла. Делай на Racket/Scheme
>>09945
Математика там особо не нужна, более того некоторые упражнения (например на доказательство можно пропускать), так как практического смысла для разработчика они не несут. Остальные формулы, которые будут нужны, даются по ходу книги.
Осилить надо документацию по установке Racket и пакета sicp к нему. Все остальное в книге рассказывается прежде чем дать задание.
Вот гайд https://guides.hexlet.io/how-to-learn-sicp/
Может тебе и не плох, я ведь не знаю что тебе больше подходит.
У меня есть необходимость держать код на локалке, трекать гитом, заниматься иногда в оффлайн-моде.
Просто берешь стандарт и читаешь, ссылка где-то в треде была (оп его тоже читал).
Здоровья тебе мил человек
Стоят в очереди в столовой джавист, питонист и php-шник. Первой пришла очередь джависта, и он говорит:
- Дайте мне Борщ борщ нью Борщ.
Питонист как начал над ним угарать, и заказывает громко:
- Мне борщ - и шепотом прибавил - еще деф пюрешка (селф, котлетки).
Взял свой заказ и ушел. Последний подходит php-шник и говорит:
- А у меня с собой - достаёт контейнер с говном и начинает жрать.
Есть реализация
На питоне: https://wizardforcel.gitbooks.io/sicp-in-python/content/
На JS: https://www.comp.nus.edu.sg/~cs1101s/sicp/
Может еще на каких языках есть, хз.
Нет, не остались. Читай пейперы микрософтовской команды по модульным компиляторам. В драконе вообще парсер полкниги пишут, meh.
спс
Да.
Я по диагонали прочитал, но охуел от сложности, попытки запускать код бросил после первых же провальных попыток. Схема, в конце концов, простой язык, её можно в голове "запускать".
По идее, atom? тебе должна предоставлять нижележащая лисп-система, на которой ты всё пишешь.
А вообще, нахуя ты эту книжку читаешь? Собираешься свой компилятор Scheme писать?
640x352, 2:27
Да не, и так много соблазнов, да отвлекающих факторов. ITAOTS - шо цэ за хуйня? Гугл молчит.
>>11172
Сикп слишком сложно, да и хтдп нихера не легкая, но все-таки продвигаюсь и получается. И просветление как раз получаю в каждой теме глаза открываются на что-то новое.
>>11179
Я английскую читаю, с переводчиком.
(define (dvach oldfag . newfags))
(dvach anon slavik karasik)
Почему когда я вызываю (cdr newfags), то результатом получаю ((karasik)), а не (karasik) проверено в отладчике?
Код: https://pastebin.com/g6UedM37
Ах, да, делаю все на ракете, может быть, это важно.
> Почему когда я вызываю (cdr newfags), то результатом получаю ((karasik)), а не (karasik)
Потому что ты вызываешь свою parity криво. У тебя вторым аргументом становятся не значения из списка l, а сам список. Если хочешь передавать произвольный список аргументов, надо юзать apply: https://docs.racket-lang.org/reference/procedures.html?q=apply#(def._((lib._racket/private/base..rkt)._apply))
Пофиксил твой кот: https://pastebin.com/4gTT8RgB
Большое спасибо, бро.
мимокрок
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 курса.
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 курса.
> 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
Лично для меня, прочитавшего пока что сотню с лишним страниц, главной пользой книги оказалось то, что я научился адекватнее выстраивать иерархию кода и куда реже пишу одни и те же куски по много раз.
>programming is a shallow activity and that what truly matters is an understanding of domain knowledge
Абсолютно верно, что не так-то?
Алсо, шизанутая какая-то паста, физику блядь учить для сикпа, ну-ну.
Тоже прикололо. Как они собрались прогать не зная доменной области. "Типа ну мен тимлид сказал тут кнопку прихуярить - ща ебана подожжи".
Неа. Они это даже обосновали при переходе.
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.
Это всё магия.
https://cs61a.org/
Никак нет.
Да, буду.
Может быть.
Блин, у меня есть фетиш, если это можно так назвать, коллекционировать книги связанные с технологиями/программированием. Но дочитывать я их не дочитываю нихуя. Просто приятно наблюдать как на полке находятся
Для этого даже термин есть, "полочное порно".
Тоже этим грешу, особенно когда речь идет о комиксах.
Раньше у интеллигенции было принято целые библиотеки дома держать.
Я обожаю заходить на двачи, чтобы видеть таких вот гениев. Когда я вижу существование подобных людей практически вживую, я понимаю, что мне еще есть куда расти.
Анон, расскажи мне, как ты учишься, если тебе не трудно.
Мозгом, дальше.
Первую, обязательную, половину книги (главы 1-3) можно в неспешном темпе прорешать за 2-3 месяца (по 3 часа в день).
Сука, это же книги! Ебать я долбоеб
Первые 3 главы это 225 упражнений. Допустим, ты прорешиваешь не все, оставим 200. Возьмем срок 2 недели - это 14 дней. Тогда в день надо решать около 14 упражнений. В среднем программист может продуктивно работать часов 6 в день, но возьмем 8 (и это без учета перерывов). 8 часов - это 480 минут. 480 / 14 - что выходит около 34 минут на упражнение. И это только упражнения, без прочитывания теории или просмотра лекции. Так что крайне маловероятно.
Там куча упражнений, которые делаются за менее чем 5 минут устно или на листочке, а в первой главе так вообще нет ничего стоящего, можно потратить день на нее для ознакомления с языком.
>в первой главе так вообще нет ничего стоящего, можно потратить день на нее для ознакомления с языком.
Твое ебало, когда даже половины первой главы не осилил и бросил :З
Зря. Тебе просто нужно было поставить срок (2 дня например) на решение задача и если не решил, то залезть в ответы.
Да я в самом начале обучения пытался его читать. Вообще не понимал, что происходит, пытался решать на бумаге, а не в программе и т.д. Сейчас-то скорее всего первую главу вытяну, если решать начну, но прорешиваю хтдп и бросать пока не планирую.
>лучшей книги всех времен и народов
челы не осиливают первую главу
Попробуй реализацию на другом языке посмотреть. Схема уебская, черт ногу сломит с этими скобками, а синтаксис этот тебе нигде больше не пригодится все равно. Там все равно вся фишка книги не в схемолиспах.
(abs -5)
Ну вот как раз со схемой-то я более-менее и разобрался, и хтдп на ней же прорешиваю.
Неужели нельзя сделать так чтобы cond выводил мне две переменные? Где ошибка?
Вон человек выше даже не знает, как вернуть две переменные на этом языке, а вот в питоне бы сразу написал:
> return x, y
и все бы заработало
>Там все равно вся фишка книги не в схемолиспах
Пока что не удалось доказать, что использование неучебных языков способно как-то обогатить сикп или хотя бы не обеднить его.
На ракете. Не знаю, у меня всё быстро. Хотя время запуска долгое, прямо как у явы, потому что там в стандартной библиотеке дохуя всего. А щас к лету в ракетке окончательно перепилят ядро на Chez, и будет вообще n1 в бенчмарках.
Я дропнул русскую после неточности в одном из заданий. В английской к тому же и шрифт и вцелом оформление поприятнее.
>потому что она 2006 года, а английская 2016?
Нет.
> И важно ли это?
Если не владеешь ангельским, русский перевод пойдёт.
В Яндекс, мэйл, 2гис или подобное?
Тогда могу и поверить.
В остальные - нет. Может как самый максимум у версталы спросят сортировку пузырьком и то чисто поржать. Никто балансировать дерево не заставит.
Я хуй знает, я пока только анонов спрашиваю. Выучу алгоритмы, матан, дифгеом, мехмат, молекулярку, сделаю свою копию двача и лицокниги, потом устраиваться буду.
Ну не верстальщиком ладно, js-программистом, реакто-дрочилой. Там спрашивают. Вы все равно уже все прочитали и просто на аниме-девочек тут дрочите. Давайте сделаем тред.
Меня не спрашивали, а я работаю js-макакой. Но, правда, далеко не в топ компании. Да и давненько на собеседованиях не был.
P.S. вместо Кормена лучше бы Скину читал. Тут к примеру его рекомендуют https://teachyourselfcs.com/
>уже у верстальщиков спрашивают
А то верстальщик не формошлеп, занимающийся тупой неинтересной хуйней.
Я хочу выяснить процент изменения величины guess. Дайте намек.
Чисто так, с потолка, по-идее у тебя будет сравнение двух чисел. Ну и отними от большего меньшее. Потом большее подели на 100 и полученное число умножь на разницу этих чисел.
( (- х у) (/ х 100))
Хотя скорее всего я хуйню написал, т.к. не вникал в задачу.
оп*
Открыл своё решение двухгодичной давности, и увидел вот такое:
код не смотри, намёк ниже
(define (good-enough? guess new-guess)
(< (abs (- guess new-guess)) 0.000001))
т.е. я просто сравниваю модуль разницы guess и нового x с очень маленьким числом.
как бы способ определения я итак понимаю. А как подобную вещь интегрировать к код? как интерпретатор будет определять когда возникается new-guess если изначально он оперирует с guess и x.
Она уже "интегрирована", в коде из книги вызывается функция good-enough?. Зачем ты ввёл новую функцию compare, непонятно, тех функций, которые были в данном тебе коде, достаточно для решения задачи.
> изначально он оперирует с guess и x
Интерпретатор кстати, может быть и компилятор "оперирует" с тем, чем ты ему указываешь. Назовёшь переменную x - будет переменная по имени x, назовёшь new-guess - будет new-guess.
Подсказка для тебя: в теле функции sqrt-iter значение следующей итерации (то самое new-guess) понадобится два раза, поэтому логично положить его сначала в переменную, чтобы два раза не считать. Переменные в Scheme можно определить с помощью define, дальше, надеюсь, сам справишься.
> возникается
Ууу, братюнь, тебе не сикп надо читать, а учебник по русскому для начала. А вообще, норм троллинг тупостью, я аж чуть не порвался.
>троллинг тупостью
Сколько раз я слышал в день я слышал эту фразу, когда только начинал обучение.. прям на душе потеплело от ностальгии :З
мимо оп
Ну ебана я если семь лет в чехии живу то это явно искажает мой русский немного
Ваще конечно спасибо. Я не троллю, просто для меня всё программирование это вообще темный лес. Наверное программистам это трудно понять...
отсутствие работы, очевидно же
алсо сикп не про лиспы а про идею создания абстракций по большей части, поэтому круды на лиспе будут такие же унылые, просто синтаксис другой
> Бля не читайте букварь, потом с картиночек с мемасиками орать не сможете. А ничего другого нет.
хранить в параметрах 3 значения f
(define (p) (p))
(define (test x y) (if (= x 0) 0 y))
Затем он вычисляет выражение
(test 0 (p))
Какое поведение увидит Бен, если интерпретатор использует аппликативный порядок вычислений? Какое поведение он увидит, если интерпретатор использует нормальный порядок? Объясните Ваш ответ. (Предполагается, что правило вычисления особой формы if одинаково независимо от того, какой порядок вычислений используется. Сначала вычисляется выражение-предикат, и результат определяет, нужно ли вычислять выражение-следствие или альтернативу.)
Бле чёт я не догоняю нафига в р р в скобки берёт и что это должно значить?
И так же непонятно как тест будет работать. Компилятор у меня тупо виснет, когда я этот код забиваю.
Решил посмотреть что в оригинале и задание не нашёл. Чё столько отличий-то??? Я думал это просто перевод, а тут какая-то адаптация для йоддефицитных. Какая из книг более актуальна? С учётом слабого английского.
>Решил посмотреть что в оригинале и задание не нашёл
Есть оно там точно под таким же номером. Открой в конце книги указатель на все упражнения и перейди по нему, если так найти не можешь.
Если p - процедура, то тогда (p) - вызов процедуры, очевидно же
> И так же непонятно как тест будет работать. Компилятор у меня тупо виснет, когда я этот код забиваю.
Ну все верно. В нашем случае с апликативным порядком оно и будет зацикливаться, т.к. будет бесконечный вызов процедуры, а вот при нормальном - оно бы просто выдало 0
Вникай лучше в текст перед упражнениями
Если порядок аппликативный то кал застрянет в бесконечном цикле определения функции p потому что в строке (test x y) (if (= x 0) 0 y) сразу подставит ноль и p, а потом полезет в p (надо ж её раскрыть, мы же у мамы аппликативные) и там задохнётся.
А если нормальный то он сначала проверит равен ли икс нулю (а он равен), перейдёт к возврату нуля и в рот он хотел ебать что там за p такое дальше стояло.
Это по сути иллюстрация фразы "не лезь бля дебил сука ебаный" только на схеме.
Нет, это ведь просто объявление процедуры, а вызовет она саму себя только после того как ее кто-нибудь вызовет.
>Но при дефане р вызывает саму себя?
Это хороший вопрос. Поразмыслим логически. Во-первых если бы он вызывал, то могла ли программа работать так, как задумано? Во-вторых (хотя это самое главное), а зачем и самое главное КАК ему вызывать функцию в дефиниции? Чтобы её вызвать. нужны аргументы, верно? А где ты возьмёшь аргументы, если ты пытаешься функцию вычислить прямо в определении? Нигде. Следовательно и делать этого не нужно.
На самом деле есть такая штука как "синтаксический анализ", и компилятор может анализировать синтаксис кода до его выполнения, НО обрати внимание что чисто синтаксически выражение (define (p) (p)) совершенно легитимно.
Не знаю. У меня средний-выше среднего. Мне русскую версию не так комфортно было читать (шрифт, оформление), поэтому занимался по той, что с гитхаба от sarabander.
(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)))
Что получится, когда Лиза попытается использовать эту процедуру для вычисления квадратных корней? Объясните.
Да объясните плз. Этож вроде нормально для липса использовать процедуры в процедурах в которых используются процедуры и т.д. Все параметры вроде как определены вполне конкретно чё он сука виснет то???
Эт вообще нормально что у меня сложности возникают на таком этапе?
нашёл ответ. Я так понял что в обычном иф компил не доходит до
скрт. Но что меня больше интересует главная проблема в том что процедура в своём теле вызывает саму себя, и еслиб не особенности иф она бы нифига не работала. Насколько вообще это справедливо в общем случае? То есть насколько удачная идея вызывать процедуру в собственном теле?
HTDP - это типа упрощенный вариант SICP для тех, кто не хочет задачки связанные с математикой. Обычно рекомендуется попробовать SICP, если совсем не идет, то можешь браться за HTDP
Уметь читать.
Дальше берешь книгу, устанавливаешь racket и пакет sicp к нему и все. Читаешь, выполняешь упражнения.
вот "гайд" https://guides.hexlet.io/how-to-learn-sicp/
там есть репозиторий для старта
>насколько удачная идея вызывать процедуру в собственном теле
Это рекурсия - нормальная вещь, если есть условия выхода из нее
В книге все описано
> и еслиб не особенности иф она бы нифига не работала
Вангую там загвоздка в порядке вычислений, ты же выше постил про нормальный и аппликативный порядок, вот при аппликативном сначала раскрываются все аргументы, и если на каком-то моменте пойдёт бесконечная рекурсия, то она пойдёт.
Возможно если бы эта хуйня в нормальном порядке вызывалась то и норм было бы ("возможно" потому что не помню книжного контекста и в книжку лень лезть)
>Это по сути иллюстрация фразы "не лезь бля дебил сука ебаный" только на схеме.
Потерпел сокрушительное поражение.
400x220, 1:40
>>22473
дык понятно что рекурсия интересная практика использовать метод до того как раскрыта его суть, еслиб я был корзиночкой с бостона то после первой же лекции отправился толкать дурь в бронксе. Правильно ли я понял что при рекурсии в лиспе не считая родных процедур типа if и cond если я условия выхода из цикла ставлю ДО вызова процедуры то ничего кроме аутофелляции я не получу?
Т.е. если я сейчас подшаманю в проге из примера и смогу сделать условия выхода после вызова процедуры то она заработает?
>>22468
>>22469
ясненько
Я тебе отвечал именно на вопрос про рекурсию
> насколько удачная идея вызывать процедуру в собственном теле
касаемо же упражнение тут не только в рекурсии же дело, а как написали выше в порядке вычислений. В данном случае new-if сделана как процедура и поскольку у нас апликативный порядок, то с начала будут вычисляться передаваемые аргументы. Вот тут она и зациклиться из-за вызова sqrt-iter в else-clause нашего new-if.
Я уже просто ору, переменные так неочевидно реализованы, что ебучий счётчик сделать не могу то есть могу, но тогда надо количество интераций при вызове процедуры вбивать.
> как в лиспе задать цикл с фиксированным числом повторений?
Эмм… вызвать функцию из другой функции и передать ей количество повторений аргументом, а она будет в конце рекурсивно вызывать себя опять с аргументом на единицу меньшим? Ну так, просто первое что в голову пришло.
Я сегодня делал цикл в sqlite рекурсией, в итоге не осилил как надо было мне нужно было n уникальных случайных чисел, я получал меньше чем нужно и сделал на питоне в одну строчку, но любопытно, что там есть такая возможность.
Мой подход был совсем неверным, надо было всего лишь рекурсивно сгенерировать числа от 1 до n, пример чего есть в доках, далее просто order by random() limit k;
А я пытался проверять на каждом шаге рекурсии получил ли я новое число.
>мы вообще тут сидим с какой-то же целью
Разумеется, лично я например с целью убить всех людей
соболезную твоей семье
>если вдруг я научусь программировать на этом это хоть поможет при использовании других языков?
Не, тебе уже ничего не поможет с такими формулировками.
А если серьезно, то да (но не французского, лол).
Первые 3 главы - это основы, которые пригодятся с любом случае. Проблема в том, что люди у которых нет опыта это не могут понять и не верят остальным, а те, у которых уже много опыта должны были перерости основы, данные в этих главах. В итоге две категории людей считают, что книга не нужна, только по разным причинам.
Без языка только алгоритмы, дискретка, бд и всякие рефакторинги с паттернами.
Как тут писали "ну и толку что ты можешь массив отсортировать десятью способами если вывод в файл не осилишь"
Ты работаешь программистом? Если нет - выбирай сферу деятельности и изучай языки и экосистему для того, чем хочешь заниматься. Ну и можешь заглянуть в этот список книг 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)
Да не за что. Ну в таком случае те книги по ссылке подойдут лучше, то что я написал уже опосля можешь смотреть.
Посмотрел, но большая часть из них у меня уже есть. Просто думал, может есть что-то такое же фундаментальное и похожее на СИКП. Но после него советуют обычно "Чистый код" или "Совершенный код".
Для вкатывальщиков самый разумный совет
Если не надо передавать состояние между вызовами тела цикла https://pastebin.com/MZvEMGnM
Если надо, то используй reduce, или пиши рекурсивную функцию под конкретный случай.
Привет, школьник.
25 лвл, пацаны сказали вкатывайся в сикп, станешь спецом, ай малаца!
Нахуй ты тут пишешь об этом? Всем похуй. Будут результаты - показывай, будут вопросы - спрашивай.
Вкатываюсь в комьюнити, завожу друзей. Тебя ебет вообще? Иди одноклассникам рассказывай что им делать.
Кстати смотрел скептически на этот совет ещё пару дней назад, но открыл чистый код и и поменял своё мнение.
Ты с /soc/ путаешь. Вот там можно и друзей завести, и даже выебать их.
Да я вот тоже, посмотрел недавно обзор на "Совершенный код" и преисполнился в своем познании.
>не считая родных процедур типа if и cond
if и cond - не процедуры, а особые формы. Если дочитаешь до четвёртой главы, на глубоком уровне поймёшь, что это такое, реализовав их вручную.
я так понял там весь прикол как раз в том чтоб запилить программу в 3 строки. Большинство заданий в сикпе элементарны если их реализовывать не в лиспе. А так хоть просрёшся маленько
> Большинство заданий в сикпе элементарны если их реализовывать не в лиспе
Нихуя. Из подобного могу вспомнить только дек, который на обычных указателях в каком-нибудь Си действительно проще реализовать, но и то, когда ты врубаешься, как использовать мутабельные пары вместо указателей, все встает на свои места.
>>25905
Если с Си у тебя только опыт вката, то я бы не советовал его использовать. Часть заданий СИКПа подразумевает наличие уже готовых фич в языке (замыканий или динамической типизации, например), без которых полноценные решения будет сделать сложнее. Половину третьей главы ты на Си уже не сделаешь (там, где начинаются потоки, реализованные через ленивые вычисления), 4-ю целиком придется пропускать (если только ты не готов сразу написать на сишке полноценный интерпретатор лиспа).
Короче, не мучай себя, выбирай питон.
>нам требуется доказать, что Fib(n) – это ближайшее целое число к φn/√5, где φ=(1+√5)/2
Приходят к
>Fib(n) = (φn-ψn)/√5, где ψ=(1-√5)/2;
Что ψn вообще такое и откуда оно берётся?
Я думал я программирование учить буду, а не матан.
а всё сорян это дробная часть
Это не матан, это примитивная довольно алгебра. Вот, почитай в научно-популярном журнале для школьников не троллинг: http://kvant.mccme.ru/pdf/1997/06/kv0697kaleid.pdf
Да.
давай порассказывай мне про то что в школе учат. Хотя хз мб в каких-нить московских лицеях детишек и задрачивают.
Мы даж на математической кафедре в нашей шараге золотое сечение и ряды фибоначи мельком проходили и ооооооочень редко оно потом ещё встречалось.
Пока вы дрочите друг друга в жопы в этом треде, я зарабатываю деньги на веб- и мобильной разработке.
960x540, 0:05
еслиб я хотел зарабатывать деньги поехал бы хуячить по вахте на севера или на завод к дяде пете. Всё лучше чем пилить говносайты и никому ненужные приложения на сосифон.
>>04382 (OP)
Ктонить знает как remainder работает? Что он делает я знаю а вот как он это делает?
>Программирую 30 лет, из них 20 - за деньги.
>Книгу не читал
А мог бы из них 25, а то и 28 — за деньги
>Что он делает я знаю а вот как он это делает?
Как он находит остаток? Ты же про остаток от деления говоришь?
Ну подумай, а как лично ты находишь остаток? Делишь делимое на делитель, а потом отбрасываешь дробную часть, умножаешь результат на делитель, вычитаешь полученное из делимого. Это первое, что приходит в голову. А соответствует ли это процессу, проходящему в компьютере, мне лично остаётся только догадываться. Но если в языках (например в пистоне) есть т.н. "целочисленное деление", то можно предположить что как-то так всё и происходит.
>а потом отбрасываешь дробную часть
>Делишь делимое на делитель, а потом отбрасываешь дробную часть, умножаешь результат на делитель, вычитаешь полученное из делимого.
чёт как-то не сходится. Да и отбросить дробь без ремаиндера не получится. Меня интересовала реализация именно на лиспе, не думаю что она прям на асмблере написана как сложение ну или как там на чём там кампилятор пишут
Почему я должен был подразумевать твоё место жительства, основываясь на одном только языке (ты пишешь по-русски), если в сшп том же русскоговорящих пруд пруди? А если бы ты оказался сыном / дочерью эмигрантов, и обиделся бы?
Повтори
>Да и отбросить дробь без ремаиндера не получится
Что-то мне подсказывает, что floor это всё таки низкоуровневая операция, но наверняка ты прав и есть какая-то лисповская её реализация, недаром же компиляторы лиспа умеют компилировать сами себя и недаром же были лисп-машины.
Читай дальше, наверняка там потом будет. Заодно и мне расскажешь.
Мне тоже лень разбираться, но как я понял, remainder и quotient реализованы на си или асме, а более высокоуровневые функции (floor, round ...) уже на лиспе.
Про let дальше в книге объясняется, не помню, то ли в первой главе, то ли во второй.
Многие низкоуровневые операции в лиспах реализованы на нижележащем системном языке, читай - на C. Вот, например, низкоуровневая реализация remainder в Racket: https://github.com/racket/racket/blob/b133bea92e34f3e316711a51a8c485ff3715cbf1/racket/src/racket/src/numarith.c#L936
В четвёртой и пятой главах будет описано, как, имея произвольные примитивы для работы со списками, которые без разницы где и как реализованы, можно написать реализацию интерпретатора и компилятора соответственно. Дочитай до конца, базарю, ещё захочешь.
>>29482
спс анончики
Всё таки хотелось бы узнать на чём вы прогаете. Пользовался
https://repl.it/languages/scheme
пока не встретился с remainder который он не распознаёт, список его собственных процедур не нашёл. Пересел на racket и чёт ахуел. Вначале от того что там надо выбрать язык. А потом от того что он 4 строки 30 секунд обрабатывает. Затем начались неприятности посерьёзней без begin он отказывался включать в тело несколько процедур. Теперь я столкнулся с проблемой, что он не даёт определить процедуру в теле другой процедуры и вот это уже пздц т.к. чтоб это обойти мне приходится писать в два раза больше.
> без begin он отказывался включать в тело несколько процедур
Не может быть, ты, скорее всего, что-то не так понял, см. рис. 1.
> не даёт определить процедуру в теле другой процедуры
Не может быть, ты, скорее всего, что-то не так понял, см. рис. 2.
> А потом от того что он 4 строки 30 секунд обрабатывает.
У тебя там что, пентиум два? Даже на моём некрожелезе 2012 года ракетка быстро шевелится.
А че так ракетная иде так много памяти жрет?
ето ж пизда, боюсь представить сколько ей надо, когда строк кода будет побольше 10
> 521.55M
> много
Кек, интересно послушать, что ты скажешь про новомодную электронохуету типа vscode или atom.
Так vscode жрет столько же при куче дополнений лол
>новомодная
>атом
поделил на 0 так сказать
ладно иди на хуй, дебил.
ну ок может не 30сек может 15-20
просто
https://repl.it/languages/scheme
мгновенно всё считал
комп асасина последнего на максималках 1080 30 фпс тянет
Ты думаешь, что занимаемая ide память заисит от количества строчек в твоем файле?
>>29692
Атом определенно относится к поколению "новомодных иде на электроне", которое до сих пор является новомодным. До этого были "новомодные иде на джаве", но сейчас они уже не новомодные.
Нормальные же люди, разумеется, юзают имакс.
Просто зайди в настройки и либо выбери нужный язык, либо включи выбор языка по #lang.
Поставь поддержку sicp в своём racket, продвинутый студент: https://docs.racket-lang.org/sicp-manual/Installation.html
> ну ок может не 30сек может 15-20
Друг, у тебя скорее всего жёсткий диск помирает.
Да быть такого не может. Я вышел в интернет с данным вопросом, така проблема не только у меня. Получше стало когда 86 версию поставил, но всёравно
долго
>Ты думаешь,
Все ясно, очередной дебил, решающий за других.
больше строчек, больше данных, больше операций, больше памяти. Объяснил для имбецила.
:3
Ты в порядке?
Хочу начать читать SICP. Вопрос, нужно ли сначала поучить Racket для этого?
Нет, в книге язык объяснят по ходу дела. Всё, что тебе нужно, в шапке треда а ещё точнее, вот по этой ссылке https://docs.racket-lang.org/sicp-manual/Installation.html
Двощ, на собеседовании сказали пиздовать читать SICP. Собеседовался на JS-макакена.
Вопрос: нахуя? Зачем нужна эта книга и чему она меня научит?
На Scheme. Racket - реализация Scheme.
>Двощ, на собеседовании сказали пиздовать читать SICP.
Ебать у меня брови поднялись щас до потолка.
Не врёшь, не троллишь?
Это тебе так в мягкой форме намекнули, что ты программировать не умеешь.
в том что это основы основ.
И если у анона есть диплом по данной специальности то он может его смело выбросить.
Не верится просто что жс макакам неиронично советуют эти самые основы основ, такое ощущение что анона слегонца тральнули на собесе.
>чему она меня научит
Программировать. и это тонкий намек на то, что ты сейчас это делать не умеешь
причём я уверен что антуан на самом деле не очень то и заслуживал подобного, но хрюша не хрюша если не козырнёт хотя бы зачатками знаний.
А вот я думаю, что заслуживал. Он же наверняка даже русскую версию открыл после того собеседования, пробежался глазами и понимай он, что там пишут - стал бы хуесосить хрюшу, мол там нихуя интересного в книге нет, я все это умею, хуле он доебался? Но нет, он задает вопросы по книге, значит все-таки рыльце в пушку, ну или в говне, лол.
Посоветовали как более внятную современную версию SICP на JavaScript. Как думаете стоит изучать на нем? Книга полная более менее? Хотя бы основные главы полные? Пройдитесь пожалуйста глазами кому не сложно. Или идея максимально тупая? Просто прошелся глазами и охуел от оттого что на инглише мне более понятно о чем пишут чем в русском переводе оригинала.
>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.
Блядь, они просто прошлись поиском и заменой?
>Хотя бы основные главы полные?
Основные главы на месте, но я бы всё-таки взялся бы на твоём месте за оригинал, чтобы не пришлось потом рот мылом от JSговна отмывать
Ну там хотя бы изначально авторы книги под лисп писали, а как качественно под js интегрировали - большой вопрос.
JS просто единственный язык который я знаю более менее хорошо. Ну еще Java но на нем писать пытка. И палкой не заставишь.
Так и представляю, как корзиночка, закончивший зажопинский колледж с отличием по специальности оператор ЭВМ, с ноги открывает дверь в московской гарант и с гордостью вываливает на стол свой диплом.
Ещё и понты гнуть начинает: в совершенстве владеют бэйсиком, владею Паскалем и делфой, знаю синтаксис асмы. Вы такого спеца хер где найдете ещё.
В моём рту знание элементарной хуиты уровня "ну карочи в скобках список из элементов чериз прабел, там ищё аператар впирёд можна паставеть" занимает очень мало места.
И это вообще-то грустно, а не смешно. Чё хорошего в том, что такое ВО обосранное в стране?
21 век. Сейчас вышку даже на курсере можно получить. Выйдет не сильно дороже чем в рашковузе
Добрый вечер, а кто? Еслиб наш рынок реально бы требовал квалифицированных специалистов, то вузы бы их готовили никто бы просто не ходил в вузы, которые дают недостаточно для устройства на нормальную работу. Сейчас же пофиг куда ты пойдешь учится лиж бы корочку дали, а остальному на работе научат.
В принципе я не считаю что это что-то плохое когда человек приходит на работу и его надо учить работать. Особенно сейчас когда постоянно все меняется. Как раз и нужно чтобы вузы делали человека максимально обучаемым. И с этим у нас в стране всё не так уж плохо. У технарей разумеется. Гораздо хуже то что кроме ит и менеджмента высшего звена у нас практически нет сфер где реально бы ценили специалистов.
>Добрый вечер, а кто?
Ты не в курсе кто финансирует вузы в РФ?
>б наш рынок реально бы требовал квалифицированных специалистов, то вузы бы их готовили
Одно не следует из другого. Вот если бы заинтересованные лица лично лили деньги в этот процесс, тогда да.
К остальному у меня нет вопросов.
480x360, 4:13
Ну шо, был перерыв месяц, возвращаюсь к обучению. Прорешиваю хтдп первой версии, прорешал 25% вполне успешно, сейчас буду двигаться дальше.
А ты тот оп, что примерно год назад вкатывался и менял сикп на слоников и т.д.?
Давно за тредом не слежу
Да, он самый. Сменил сикп на слоника, потом слоника на книжку с серой обложкой (в оп-посте есть ссылка), потом хтдп второе издание прошел на 20% и пришлось дропнуть, т.к. уперся в структуры и их очень плохо объясняли, теперь хтдп первое издание прошел на 25%.
Хотя еще пропустил, что после сикпа я хтдп 2 издание пробовал, но на введении дропнул, т.к. тоже не пошло.
Я уж думал, ты уже весь сикп прорешал и поднимаешь 300 к/сек. Ну удачи тебе, ОП. Надеюсь, теперь хдтп пойдёт. Твоему упорству можно позавидовать.
Видишь, я полгода только врубался и вникал, что такое программирование и с какой стороны в принципе подходить к обучению, метался от книги к книге и пр. Другие полгода уже более-менее учился и прорешивал, но с перерывами по месяцу-полтора, т.к. то мозги закипят, то своих дел накопится. Но дело не бросаю и сейчас все вполне получается.
>Ну удачи тебе, ОП. Надеюсь, теперь хдтп пойдёт. Твоему упорству можно позавидовать.
Спасибо, думаю не подведу :З
Собсна, в чём вопрос. Обязательно ли решать задачи на Scheme? Можно ли читать SICP параллельно с документацией какого-нибудь питона/жабы/си? Или, может, тут нужен конкретно Scheme или конкретно функциональное программирование?
Ураааа всйо я читать
Я блядь представил как он будет читать сикп параллельно с доками gcc какого-нибудь
Попробую хтдп чёт мне кажется я там ещё больше пососу т.к. английский слабовато знаю, а на русском не нашёл. Если не получится пойду смотреть видеогайды как сделать сайт.
Видимо стараешься хреново, раз на листочке всё нормас. На какой теме то хоть остановился? Совсем новичок в программировании? Просто мог бы на каком-нибудь другом языке тогда писать, если схема сложной кажется( хотя из всех функциональных легче неё не видел вообще). Ну или сюда в тред посрал бы.
> 212
лмао
> Попробую хтдп
там не легче уже точно, возьми яйца в рот и продолжай sicp ,сука.
Не рекомендую HTDP и SICP. Код в обоих книгах представляет собой помои, написанные по бэд практисам. В продакшен такие портянки с дрисней не пошли бы. Обе книги расчитаны на скриптовых макак, в то время как программист должен изучать архитектуру компьютера и операционных систем, режимы работы процессора, работу программ на низком урове, PE формат и уметь пропатчить программу в hex-редакторе.
>В продакшен такие портянки с дрисней не пошли бы
Как раз потому, что код чересчур "умный", в продакшене нужен код в который не надо вникать по три часа. А в обучении заебись.
Нахуй не нужны человеку на начальном этапе бест практисы и паттерны.
Реверансв сторону жс вообще ни к селу ни к городу.
Чушь собачья. Основная проблема в разработке ПО - это сложность больших программ. СИКП учит справляться со сложностью разными способами - начиная с абстрагирования элементов программы и заканчивая разработкой языков, на которых решение и формулировка задачи оказывается проще и понятнее.
Какие у тебя претензии к коду в СИКПе вообще не очень понятно. Код там предельно ясный. Единственная претензия, которую к нему можно предъявить - местами он не оптимален, но авторы и сами об этом говорят.
>раз на листочке всё нормас
Если бы, вот за последних 2 темы было 12 заданий "на листочке" я смог сделать 2 или 3
>На какой теме то хоть остановился?
Процедуры в качестве аргументов
Самое херовое, что код для меня минимум читабелен, даже чтоб просто разобрать решение у меня уходит дохера времени. Что бы понять что делает строка надо держать в уме весь код потому что постоянно ссылается одно на другое и что либо упустить очень легко. И при таком раскладе сделать что-либо самому без тупой копипасты для меня становиться нетривиальной задачей.
Упражнение 1.29.
Вроде элементарная задача. Я блядь даже несколько способов придумал, но пытался реализовать в первую очередь те что были максимально близки к примеру из темы. И вот на элементарный пример угрохано ДЖВА часа и хуй, а потом ещё минут 30 разбирал пример. Непонятно толи моё решение в принципе не правильное то ли просто где-то зарылась ошибка в понимании работы самого языка. И спросить негде. Тоесть я конечно могу засирать топик по каждой мелочи или там найти какойнить форум или канал для этого. Но блджадь этож всё столько времени. Насколько легче было еслиб я подошёл к кому-нибудь, показал что я сделаль и он бы хотяб сказал давай по новой вообще мимо или бля норм ты только не там процедуру определяешь. А так какой смысл от это сикпа будет если я его осилю только лет через 5?
Ладно чёт неосилятор разнылся.
>>34154
А в чём разница?
>А в чём разница?
Они сначала первую версию выпустили, а несколько лет спустя переиздали. Так вот я вторую прорешивал, уперся в структуры - их откровенно по уебанскому описывают. А первую сейчас решаю, прям очень сильно сложилось впечатление, что намного подробнее и лучше объясняют материал.
оп
>надо держать в уме весь код потому что постоянно ссылается одно на другое и что либо упустить очень легко.
Добро пожаловать в бытие программистом, таким на работе ты будешь заниматься по 8 часов в день 5 дней в неделю, и ещё начальник будет стоять над душой и орать, хули ещё не готово.
> Тоесть я конечно могу засирать топик по каждой мелочи или там найти какойнить форум или канал для этого.
Нутк пиши сюда в тред, тут всё равно почти никого нет, кроме опа и залётных троллей. Или в тележке пиши в @scheme_ru, там будут рады любой активности.
>имплаинг не ясный
Сначала гуглю что значат квадратные скобки, узнаю что это псевдоним для обычных скобок.
Функция под названием small, принимает на ввод l и t
если l пустой вернуть пустой список
иначе если первый элемент l (уже понятно что l значит list) меньще t
Гуглю что значит cons, узнаю что оно строит пары (пары != списки)
сделать пару из первого элемента l и результатов функции small, которой передан список l но без первого элемента и t
иначе (если первый элемент l больше t) просто вызвать small как в первом условии, только без создания пары.
На выходе должен получиться список (не уверен, но википедия намекает что именно список), состоящий из всех элементов l меньших t
Если бы я читал книгу, а не мимо проходил, то и гуглёж бы наверное не понадобился (если книга хорошая)
Ты не осилил предыдущие темы. Помню K&R читал разбирал каждую букву. Потом сам себе придумывал задачи, в итоге я решал сам прорешалто что приводилось в каждой главе в конце не подглядывая и часто залезал в последующие главы если мне чего-то не хватало. Что-то упустил.
хуль ты на двачах забыл раз такокой умный у мамы?
Привет, двач. Мамкин вкатывальщик в треде. В ближайшее время хочу начать вкатывание, отрубить телефон со старой работы, съебать в деревню (энторнет там ловит) месяца на 3, взяв с собой томик Кнута и СИКП. Планирую задрачивать в режиме сон-еда-учеба. Есть ли смысл покупать платный акк на codeacademy? Когда из меня выйдет что-либо подобное на junior'а? В какой язык следует вкатываться - C++, Python или наоборот следует брать какие-то экзотические вещи типа Haskell? Как восполнить дефицит матана и прочей хуйни (у кореша нашел книгу некого Зельдовича "Высшая матетматика для начинающих")? Английский шарю свободно.
Можешь столкнуться с такой проблемой, как у меня, когда через месяц активного обучения просто мозг закипит и следующий месяц не сможешь заниматься. По языкам не проконсультирую, т.к. сам еще не вкатился. Платные аккаунты считаю полной хуйней.
оп
Да, еще допишу, когда с полным погружением в дело уходил, я спал 2 раза в день, часов по 5. Потому что если спишь один раз, проснулся, несколько часов позанимался, мозг устал и уже до отбоя половину дня ты не занимаешься. А когда спишь 2 раза в день - 5 часов поспал, несколько часов позанимался, мозг закипел, может часок хуетой позанимался и спать лег, во сне мозг отдохнул ну и так далее. Короче максимальное погружение, но, повторюсь, что мозг потом сдается и месяц, а то и полтора просто не подходишь к обучению.
Выбери технологию, Почитай Петцольд "Код" потом или паралельно когда уже что-то поймешь приступай к основам языка и постоянно практикуйся двигаясь вперед, не пытаясь понять все сразу, книгу по языку как худ. лит. не читай, юзай как справочник.
Т.е. learning через doing? Писать helloworld и постепенно усложнять или поставить задачу по написанию желаемой программы (например бот в телеге) и постепенно въезжать как он пишется?
Книгу начал читать - до чего люблю американских авторов, пишут, чтобы ты понял, а не для того, чтобы "ой какой я умный, какую пиздатую книгу написал".
Ну я планирую поставить себя в безвыходную ситуацию. Отрубить телефон и контакты с внешним миром. Будут заканчиваться деньги и это станет стимулом лопатить дальше. В принципе - у меня и сейчас такая работа, что иной раз мозги в трубочку сворачиваются, много информации, сложные гуманитарные абстракции (я юрист лол).
Посоны, поясните что за SCIP и кому он полезен. Я начал читать книжку, там все примеры на языке lisp. Что я знаю про lisp? Что это древний язык, который ни где не используется. Очевидно, у этого языка, как и у любого другого, есть свои особенности синтаксиса и заточен он под что-то определенное. Возникает вопрос: можно ли извлечь из SCIP пользу программисту независимо от используемого языка и области разработки?
Да, примерно так. После прочтения книги Петцольда начинай учить основы программирования и лучше всего начать с С, потом С++ только классы что бы понять ООП, а дальше переходить на желаемую технологию делать что-то более реальное.
Попробуй, только отпишись потом, не поставил ли мозг тебя в безвыходную ситуацию - "пиздуй дворником мудило, но в ближайший месяц по программированию меня не трогай".
Нахуй не нужен этот си. Убогое говно, которое костылями допиливали до си+, в котором тоже было дохуя говна и допилили до крестов, кресты из-за массы костылей и допиливаний тоже является уебанским и тупорылым говном.
И тем не менее основы (циклы, условия, функции, переменные) лучше изучать на примере С, а не Джавы, где сразу непонятные классы и не дай Бог JS.
>Очевидно, у этого языка, как и у любого другого, есть свои особенности синтаксиса
У этого языка особенностей синтаксиса намного меньше, чем у любого другого существующего языка, потому что почти весь синтаксис лиспа - это ( (открывающая круглая скобка) и ( (закрывающая круглая скобка), что, в общем-то, и позволяет сконцентрироваться на изучении фундаментальных вещей, не отвлекаясь на разную синтаксическую мишуру.
> ни где не используется
Ты, мягко говоря, ошибаешься.
https://lisp-lang.org/success/
https://common-lisp.net/lisp-companies
https://clojure.org/community/companies
https://news.ycombinator.com/item?id=9813111
Я думал главный профит скобочек в том, что это по сути AST, из-за чего код можно воспринимать как данные и вертеть его как пожелаешь.
Да, гетерогенность - это то самое, что мейнстримные языки пока ещё не осилили спиздить из лиспов. Разве что в Ruby что-то такое смутно есть, но вроде как извращённое.
На такой нубовской вопрос я бы на твоём месте так не отвечал, один хуй толку не будет.
Хоть и поздно, но вставлю свои 5 копеек.
Покупать платный акк смысла нет.
И вообще, прежде чем покупать какой-то курс хорошо поищи нет ли его уже в открытом доступе слитого. Сейчас очень много курсов можно смотреть бесплатно.
У каждой компании понимание лычек (джун/мидл/синьер) разное. Некоторые могут взять и совсем начинающего, если заметят что способный к обучению и тебе нравится то, чем занимаешься. Но в любом случае надо хоть что-нибудь уметь в выбранной сфере. Изучаешь основы - идешь штурмовать собеседования. Минимум по срокам я бы сказал 6 месяцев. Максимум, наверное, года 1,5 из того, что лично знаю.
Язык - это инструмент. Выбрав первый язык программирования не обязательно потом на нем сидеть всю жизнь. Поэтому я бы порекомендовал, чтобы не было проблем найти работу, брать что-нибудь мейнстримовое на первое время (JS, PHP, Python). Это для работы.
Для обучения - СИКП с схемой самое то. Проходишь первые 3 главы. Дальше садишься за книги "Код", "Идеальный программист" и выбираешь чем будешь заниматься.
Я сам js разработчик, поэтому по php, python не подскажу. Но, если это веб, то независимо от языка проще будет начать с курсов той же html academy по верстке - там будут базовые знания по html/css. JS лучше разбирать не у них, а по learn.javascript.info. Как будешь на этой стадии проблем что разбирать дальше не возникнет, думаю. Если все же будут вопросы - пиши.
На начальной стадии матан практически не нужен. Уже когда разберешься с базой можешь засесть за алгоритмы (лучше начать с "Грокаем алгоритмы", а не Кнута).
За английский большой + тебе. Некоторые могут взять средненького кандидата только из-за того, что он неплохо прокачан в инглише.
P.S если еще не умеешь печатать вслепую - научись
Спасибо тебе, анон. Я не ухожу с треда, т.к. планирую описывать свой процесс вкатывания, чтобы другие аноны могли это наблюдать в режиме рил-тайм.
В общем начинаю разрабатывать план своего обучения, очень много дельных советов поступило. Чуть позднее сброшу, как я себе описал детальный план вкатывания.
Слепая печать у меня развита. Я пишу тебе сейчас с MacBook на котором нет русских клавиш.
Как узнать, что у человека техника эпл? Он сам тебе об этом скажет в первые минуты разговора
ха классика блять.
Мамка твоя хуита.
А эта книшка про какой ЯП?
Открою тебе тайну, только никому не говори. У всех самых крупных IT-компаний есть собственные исследовательские лаборатории. И у всех есть секретный исследовательский отдел, который днями и ночами пытается написать на Scheme интерпретатор языка Бога.
Абельсон и Сасман закодировали в СИКПе ключ к созданию такого интерпретатора и вот уже 40 лет тайное общество программистов пытается его расшифровать. Истоки уходят корнями в Ветхий Завет. Создав такой интерпретатор, мы сможем напрямую говорить с Богом. Получим огромную власть.
Но даже сейчас у нас все схвачено. В любой крупной компании руководящие места давно занимают лисперы. Приняв обет и вступив в общество тебе открываются все двери. В любом городе тебе дадут лучшую гостиницу. Любые женщины будут твоими. Счета в банках с десятью нулями на конце.
Но ты должен прорешать СИКП целиком и посвятить свою жизнь служению великой ЛИСП-машине и построению интерпретатора языка Бога. В качестве вступительного экзамена попросят доказать, почему алгоритм решения задачи о размене монет (SICP 1.2.2) корректен. Потом надо будет придумать язык для работы в заданной предметной области и написать его интерпретатор - ты должен быть металингвистическим программистом. Наконец, надо принести клятву верности: я отдаю свою жизнь служению ЛИСП-машине и созданию интерпретатора языка Бога. Вечная слава пророку Маккарти!
Только с ним - будет трудновато. Читай пасту "высшее образование в IT своими руками v2", там подробно описано про то, как вкатиться хоть на 300к+.
> поисков формошлепов-вебмакак под кроватью
Че их искать? Я формошлеп-вебмакака. На работе есть кадры, которым бы не помешало прорешать половину книги, т.к. строить нормальные абстракции они так и не научились.
И с реальным коммерческим программированием на том же js она имеет точки соприкосновения.
Но в плане того, что из нее сделали культ (типа книга книг) - тут я не согласен. Эта книга всего лишь часть обучающего процесса, а не вещь, которая заменяет собой все другие источники.
Нихуя не востребован. Можешь все задачи из книги делать на любом функциональном языке.
>Можешь все задачи из книги делать на любом функциональном языке
В прямом смысле? Допустим если я хочу выучить в будущем С или питона какого нибуть, мне поможет эта книга?
Вот только нахуя, лисп простой как мой хуй, там из всего сахара только скобачки блядь. Для ньюфагов больше и не надо.
>Эта книга не для изучения языков, а для тех, кто уже осилил хоть 1 функциональный язык
Спасибо, мне почему то казалось что эта книга наоборот для абсолютных новичков что бы познать фундамент програмирования.
Это книга для вкатывающихся блядь, ее на первом курсе читали нахуй сходу всем долбоящерам поступившим. Все основы погромача в ней.
Не слушай этого долбоеба, удивлен вообще почему он до сих пор не притащил пасту про хаскель.
Лол, ну раз вы не можете определится то я все таки прочитаю ее, все равно много свободного времени есть.
Ты возвращайся, когда ознакомишься с логикой и поймешь, что аргумент по аналогии не состоятелен.
Сука, нахуя вас крестьян читать и писать учили, чтобы вы такую хуйню писали, ничего в жизни не прочитав достойного? Жаль впустую потраченные часы твоего учителя по родному языку
мимо
Да соси хуй щекан. Если ты в своей шараге логику учил, это тебя и твои высеры нихуя компетентнее не сделает.
Я вот таким же занимался как и ты. А потом понял, что важно как можно быстрее устроиться на работу, как можно скорее начать решать реальные задачи. СИКП можно и попутно изучать. Что толку от него, если не решаешь продакшн задач и не можешь программировать за деньги? Тебе не кажется, что ты тратишь время в пустую? Так можно и 10 лет обучаться, но так и не начать писать код за деньги.
Я короче этого чувака посмотрел и прозрел.
https://www.youtube.com/watch?v=nAJKFPijN9Q
Классный инженер, с математическим образованием, пробовал разные языки, в том числе Haskell (что крайне редко встретишь среди пхпшников, тем более тех кто использует битрикс). При этом стремится к эффективности, простоте. Поэтому я тоже решил поумерить аппетиты, и писать хоть на чем, лишь бы за деньги, хоть вордпресс использовать. Поюзав немного пхп, поюзав го, таки понял, что самая быстрая и эффективная разработка будет с рельсами.
Рельсы хороши тем, что руби простой, кроме рельс почти ничего не юзают, а это значит, что не нужно распыляться на разные фреймворки как в пхп. Рельсы работают за тебя, куча автогенераций, готового кода, что очень ускоряет и облегчает разработку. Все проекты на рельсах устроены одинаково, это значит, что изучив один проект на рельсах, будешь знать как устроены все другие проекты, и не составит труда влиться в любой новый проект. Руби сейчас не пиарят, говорят что умер, это еще один плюс, мало конкуренции. Ну и один из самых больших плюсов это отличное сообщество.
P.S. На всякий случай, это я писал вот этот пост. >>46424 Даю как бы отчет, что собираюсь делать я, чтобы начать писать за деньги вместо пустого академического программирования.
(define (lower-bound x)
(define mistake 0.4)
(- x mistake))
(define (upper-bound x)
(define mistake 0.4)
(+ x mistake))
(define (mul-interval x y)
((let ((p1 (+ (lower-bound x) (lower-bound y)))
(p2 (+ (lower-bound x) (upper-bound y)))
(p3 (+ (upper-bound x) (lower-bound y)))
(p4 (+ (upper-bound x) (lower-bound y))))
(make-interval (min p1 p2 p3 p4)
(max p1 p2 p3 p4)))))
(define (make-interval x y) (cons x y))
У меня в repl.it не выдает ошибок. Какая задача вообще?
> СУКА ДА ЧТО Я ДЕЛАЮ НЕ ТАК!
Ты то, что возвращает твой make-interval пару (13.2 . 14.0) пытаешься вызвать, как функцию, что, конечно, невозможно: 13.2 - это число, а не функция. Присмотрись, вокруг let одна пара круглых скобок лишняя.
ох уж эти скобки... спасибо.
Да нет, вроде бы не в пустую трачу время. Просто есть такие дела, что нихуя не отложишь, а там уже сикп решать (хтдп, как в моем случае), js или еще что, какая разница, если один хуй времени нет.
Это база, не зависящая от языка, понимание которой в начале пути облегчит жизнь в дальнейшем тебе и твоим товарищам по работе.
> облегчит жизнь в дальнейшем тебе
А в чем конкретно? Хотелось бы примера, а лучше нескольких для более целостного понимания картины.
Ты начнешь строить хорошие абстракции в коде, что сэкономит много времени и нервов, особенно тем, кто будет твой код читать и поддерживать. Еще книга заложит понимание функционального программирования, расскажет про основу объекто-ориентированного подхода, объяснит тебе в чем сложность программ и как с ней бороться.
Это первые 3 главы. Если продолжишь читать дальше, то поймешь как и с какой целью создаются интерпретаторы языков программирования.
Решаю задачу 2.18.
Пытаюсь зделать так, чтобы обратный список выстраивался путем вычленения каждого элемента списка.
Где я объебался?
(define (reverse sample)
(
(define count (length sample))
(define (iter-reverse count)
(if (= count 0)
(list-ref sample 0)
(cons (list-ref sample (- count 1) (iter-reverse (- count 1))))))))
(define (list-ref sample-list n)
(if (= n 0)
(car sample-list)
(list-ref (cdr sample-list) (- n 1))))
(define squares-list (list 2 4 8 16))
(define list1 (list 4 3 2 6 3 4 1 3 54 3 2234))
(define emptylist (list ))
(define (length items)
(if (null? items)
0
(+ 1 (length (cdr items)))))
(define (last-pair sample)
(if (= (length sample) 0)
"error"
(list-ref sample (- (length sample ) 1))))
(define (reverse sample)
(
(define count (length sample))
(define (iter-reverse count)
(if (= count 0)
(list-ref sample 0)
(cons (list-ref sample (- count 1) (iter-reverse (- count 1))))))))
Ну работает он в компании где пилят Битрикс, что с того? Чувак закончил физмат, имеет большой опыт программирования на разных языках (в том числе Хаскель и т.п.), шарит в парадигмах, реализовал много крупных проектов. А чего добился ты? Дрочишь хеллоуворлды небось за бесплатно.
Как создавать и импортировать модули в scheme?
Знаю (load "filename"), но он просто добавляет код из файла в область видимости, а было бы хорошо импортировать функции и давать имя.
Не понял, чем тебя не устраивает load. У тебя и будут доступны все функции загруженного модуля по их именам. Или ты хотел, чтобы к ним можно было обратиться через имя модуля?
Ну да, либо при импорте можно было задавать имена функциям, чтобы не было конфликтов имен и сразу было видно, что именно импортируетя. Ну как import в javascript.
Не копипасть код в тред, выковыривать из твоих постов его никто не будет. Отправь на repl.it лучше и сюда ссылку.
Сильно зависит от используемой тобой реализации. Если она поддерживает стандарт r7rs, то смотри тут http://www.larcenists.org/Documentation/Documentation0.98/r7rs.pdf пункты 5.1 и 5.6.
Если используешь Racket, в нём довольно много расширений относительно стандарта, у модулей там своя, особая атмосфера: https://docs.racket-lang.org/guide/module-basics.html
a = 3
b = 4
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.
Где я не прав блэт?
https://repl.it/@ArtiemAlieksiei/LightgreyFrightenedNumericalanalysis-1
Правильно ли я понимаю, что на русский язык выражение переводится как:
если одновременно является верным, что ("в" больше "а") И (В меньше произведения АВ) то В получается значение А?
В это случае я не догоняю - почему компиллятор на компе вычисляет выражение этой хуйни как 16. Почему он использует значение А = 3, если в строке с if мы дали ему значение B, которое равно 4?
Сам разобрался.
Тебе важно понять, что в лиспах нет болезненного деления на statement и expression, как в других языках, в лиспах всё - выражение, даже небо, даже аллах, даже if на третьей строчке по твоей ссылке, который никуда не возвращает своё значение (a или b, в зависимости от условий), и, как следствие, бесполезен.
Условия: пользователь вводит 3 числовых значения, программа считает сумму квадратов двух наибольших.
Вот мое решение:
https://repl.it/@ArtiemAlieksiei/govnoebanoe
Моя логика такая:
+ ответ1 ответ2
ответ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))))
https://repl.it/@ArtiemAlieksiei/govnoebanoe
ну у меня норм посчитал
может ты не так процедуру вызываешь?
Вот решение для этой задачи - мне в целом понятно, что написано, но есть вопросы, ответов на которых в начале глав книги я не увидел.
Можно ли попросить о помощи в ответе на них:
http://sicp.sergeykhenkin.com/2007/08/14/sicp-exercise-solution-1-3/
(define (square a) ( a a))
(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))))
Что я не так понимаю?
мдэм... если конечно я правильно понял твои вопросы
Вначале он пишет процедуру квадрата, которую потом вызывает в процедуре sum-of-squares.
В лиспе переменных нету, есть формальные параметры, которые используются в процедуре и перечисляются после имени процедуры.
ещё замечу что я это задание писал одной процедурой. Эт уже там профессиональная деформация у автора пошла он всё готов на процедуры разложить что вообщет является полезным навыком одним из-за которых мы эту книгу и открываем
Ты просто хуёво английский знаешь
symbolic activity - активность, связанная с манипуляцией символами/текстом
argument здесь - глагол
"Как и в любой другой активности, связанной с символами, мы убеждаемся в истинности программ с помощью рассуждений"
Ну и так далее. Читай русский перевод, он хороший только опечаток в нём дохуя
>- "я ввожу переменную sum-of-biggest-squares", но почему он пишет "a b c"
Потому что это не определение переменной, а определение функции. NOTE THE DIFFERENCE IT COULD SAVE YOUR LIFE
(define test 42) ;; переменная, изначально равная 42
(define (test) 42) ;; функция без аргументов, которая всегда возвращает 42
Камон братюнь, ты первую главу, где основы синтаксиса объясняют, жопой читал?
Перечитал первую главу, он об этом в одном месте лишь вскользь упоминает, точнее использует операторы функции таким образом.
Таким образом:
define (test a b c) (y)
- означает "я определяю функцию "test" со значениями a b c способом y" и вместо y может быть уже что угодно.
Спасибо, братюнь.
>define (test a b c) (y)
>- означает "я определяю функцию "test" со значениями a b c способом y" и вместо y может быть уже что угодно.
Сорян, но нет. Во-первых, не "со значениями", а "с аргументами". Во-вторых, то, что ты написал, это
(define (test a b c) (y))
с учётом того, что "способом y" означает "вызвать функцию `y` без аргументов и вернуть её результат".
Не за что, обращайся, если что.
Если таки прорешать всю книгу, что это даст? Достигну просветления, стану сверхпрограммистом или что?
>Примерно по 2 задачи
Ты погоди, там еще будут задачи над которыми можешь на несколько дней зависнуть.
Ускоряет ли лисп скорость/качество разработки? Пишу для себя хуйню на node.js, есть вариант поставить clojurescript.
Да.
clojurescript - для браузеров
он в сравнении с реактом не ускорит, т.к. в нем лишь обертки + дебаг не слишком удобен
если замена ноды, то clojure просто, а она уже на jvm работает.
говорят, строк кода выходит меньше и типа за счет этого проще
(if (= k 1) 0 (/(n k) (+ (d k) (cont-frac n d (- k 1))))))
как эта хуйня работает?
ротебал этот лисп до него у меня не было такого чтоб я писал код и не понимал как он работает. Сука я это почти наугад писал ебаны врот
Cерьезно, я лучше буду решать литкоде, чем это говно. Советую с этим завязать.
(n k) и (d k) - вызовы функций n и d с аргументом k.
Если к=1, то верни 0. Иначе n(k) / (d(k) + cont-frac(n, d, k-1)). Так понятнее?
почему вне зависимости какое значение после условия он мне выдаёт верный результат?
почему вне зависимости какое значение после условия он мне выдаёт верный результат?
вернее как происходит обрыв цикла почему не имеет значения что будет если к=1
Зачем ты берешься за программирование, если не можешь расставить запятые?
Твой вопрос сложнее понять, чем код, который ты привел
сасай)
Блять какие-то абсракции, эстетика погромирования нахуй, живые организмы и пирамиды... пизздос какойта чё за ебанаш писал всё это?
Вернулся к КерРитчи - лучшей хрестоматии для современного программиста
Вчитайся в условие задачи. Там цепная дробь. Распиши на бумаге, что будет скажем для k=2, k=3 и поймешь, почему там возвращается 0.
( (and (< b a) (< b c)) (define x b) )
( (and (< c a) (< c b)) (define x c) )
(else (define x 0) ) )
define: found a definition that is not at the top level
Что плохого в объявление в бранче? Почему это говно мамонта ругается на меня?
(define x (cond ( (and (< a b) (< a c)) a )
( (and (< b a) (< b c)) b )
( (and (< c a) (< c b)) c )
(else 0 ) )
)
Сорян, разобрался но всеравно хуита какаято
>Что плохого в объявление в бранче? Почему это говно мамонта ругается на меня?
Откуда вы вообще такие беретесь.
Половина треда вопросов по задачам уровня средней школы, один не осилил функцию в две строки, еще один возвращает определение переменной в функции, еще и в ветвлении, лол
Ты в плюсах и джавах тоже после return объявляешь переменные?
Весь тред хуйни из первой главы, какой же пиздец
Я же извинился что тебе ещё нужно?
>объявляешь переменные?
А предположим, я имел в виду присвоение? Ведь в контексте лиспа это разве не одно и тоже?
>Я же извинился
Я уже после увидел
>А предположим, я имел в виду присвоение? Ведь в контексте лиспа это разве не одно и тоже?
Я даже хз, что на это ответить
Мало того, что объявляя переменную в операторе ветвления ты неявно подразумеваешь, что ее вообще может не существовать, так она еще и не будет доступна вне cond, потому что есть такая вещь как область видимости
Ну и третье: функция в лиспе должна возвращать какое-то значение, define не возвращает ничего - он связывает какое-то значение с каким-то именем
И это справедливо что для этого говна мамонта, что для любого другого яп высокого уровня
блин эта процедура работает не так как надо по крайней мере, для других задач мне пришлось другую написать потому что эта давала неверный результат, ну или я где-то наконясячил, но когда переписал эту процедуру всё заработало . Но почему то даёт верный результат в данном упражнении. Больше всего меня добило что ответ не зависит от того будет там 0 или мамка вот этого токсика >>53416
>>53570
У вас тут рекурсия, пацаны.
Найс проекции, маня.
Если лисп такой охуенный, почему он такой непопулярный?
Ты же понимаешь, что не все, что стоящее становится популярным. Как и не все, что популярное - офигенное.
Причем в любой сфере. Программирование - не исключение.
> Но совершенно непонятно, почему в обоих моих примерах не вычисляется деление на ноль.
c чего ты взял, что оно не вычисляется? Оно вычисляется, просто интерпретатор которым ты пользуешься скорее всего не кидает ошибку при делении на ноль, я думаю, что в y просто лежит +бесконечность. Хотя конечно стоит заметить, что в дефолтной реализации схемы от мита при делении на ноль кидалось исключение.
Понял, спасибо.
До чего же интересно решать, наконец дошел до 2й главы, блин как жаль, что работы нет на лиспоподобных языках.
Каждой задаче свой язык. Зачем применять схему "где-то в реальности", если она уже занимает свою нишу как учебный язык? Вот и я не знаю.
Какого хрена! Объясните!
Иногда прохожу мимо этого треда и греет душу, что, пока я работаю, кто-то дрочит эту хуйню)
Эту хуйню придумали шизойды, которым просто кодинг уже не упарывает. Миру нужны решения, а не этот книжный онанизм.
Я все)
>(define make-point cons)
Ты через минуту после того как ошибку словил бежишь на двачах спрашивать?
у тебя функция вызывается до того, как ее определили
ООП -- это надстройка над императивщиной, и иначе ее воспринимать не стоит. Вот взять, например, плюсы.
Что можно сделать в плюсах, чего нельзя сделать в си? Методы? Есть функции на указатели. Наследование? Можно засунуть тип A в структуру B, это почти что наследование. Инкапсуляция -- всего лишь защита от дурака, которая не работает, потому что язык слабо типизированный (хотя это конкретно проблема плюсов, а не ООП).
Полиморфизм -- не уникальная для ООП фича, но это единственное, что фундаментально отличает ООП от ИП.
Так что мой безусловно дилетантский совет -- относись ко всему, кроме полиморфизма, как к синтаксическому сахару над ИП, это сильно упростит тебе понимание ООП.
Это как раз проявления полиморфизма в ООП. Я не говорил, что в Си можно запилить полиморфизм.
Ну ладно, подумаю еще как подловить тебя.
>Что можно сделать в плюсах, чего нельзя сделать в си?
Блядь, но это же какой-то позор...
А что можно сделать в плюсах, чего нельзя сделать в ебаном автокоде?
Бери прям в экзешник в 16ричном коде хуячь.
Охуеть, с такими мощными аргументами еще и не стесняются с умным видом на двач писать.
Да так то ничего, просто плюсы это набор костылей над байтоебством, которые вместо того, чтобы решать проблемы байтоебов, создают еще больше проблем.
А если серьезно, это была просто неудачная формулировка, если бы ты дочитал мое сообщение, ты бы понял, что я не считаю, что ИП может заменить все фичи ООП. Не все, но многие.
>Что можно сделать в плюсах, чего нельзя сделать в си?
RAII-контейнеры, рекурсивные шаблоны. Твое самое большое заблуждение, что ты считаешь кресты ОО-языком. А кресты переросли ООП примерно тогда, когда в них добавили STL, автор которой противник ООП. Т.е. в начале 90-х.
>Инкапсуляция -- всего лишь защита от дурака, которая не работает, потому что язык слабо типизированный
Инкапсуляция делается на си элементарно, более того, она есть в стандартной библиотеке. Структура FILE существует, но у тебя к ней нет доступа, потому что экспортируется она только в виде указателя и доступна в виде "методов" с "конструктором" fopen.
Другой вопрос, что это приводит к тому, что без обязательной аллокации в куче ты хуй что инкапсулируешь, это тебе не private в хедере написать.
>потому что язык слабо типизированный
Щито.
>Полиморфизм -- не уникальная для ООП фича, но это единственное, что фундаментально отличает ООП от ИП.
Если отвечать в твоем стиле (когда ты хуйню методом десятка костылей называешь "нууу, можно зделоть"), то полиморфизм на си делается подобным же образом.
Другой вопрос, что с подобным петушением ты помощи от системы типов не дождешься, поэтому это и не ООП.
>>66575
>Да так то ничего, просто плюсы это набор костылей над байтоебством, которые вместо того, чтобы решать проблемы байтоебов, создают еще больше проблем.
Это от си была куча проблем, включая buffer overflow и format strings в любом сетевом приложении в нулевых.
Сасай.
Это копия, сохраненная 2 октября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.