Это копия, сохраненная 28 января 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
Где я ещё могу пообсуждать любимый 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/
Для изучения языка-схемы порекомендую https://www.scheme.com/tspl4/
Слоником в итт называют книгу The little schemer (но мне он не зашел из-за слишком своеобразной подачи материала)
Конечно аниме, а ты что хотел? Пони не нашел, к сожалению.
Понятен посыл. Ведь аниме для детей.
в каждой мелочи видишь упрек и оскорбления? тяжело тебе по жизни, наверное.
Перекатил оп прошлого треда? Как успехи?
Бля, до сих пор не понимаю, откуда вы все эти охуенные картинки берете, лол
https://github.com/boyEstrogen/Anime-Girls-Holding-Programming-Books/
только не рассказывай никому
Да, он самый перекатил. А я тогда уперся, что с базами не смог разобраться, так хуй и положил. Но я все советы и разжевывания сохранил себе в документ, думаю разберусь. А пока не до обучения, так что в этом плане нихуя не делаю. Но не забросил в целом, просто некогда.
>>272078
Ну я в яндексе просто написал "sicp аниме", мне и выдало несколько вариантов. Кстати в прошлый раз в другом поисковике похожее вбивал и картинки другие были, так что думаю треда до 30 там пикч точно хватит разнообразных, лол.
Решил я погуглить Картинку с прошлого треда, начал с Гугла, поиск по картинкам, вставляю ссылку на картинку, жму "поиск", оно мне выдаёт Изображение удалено либо доступ к нему ограничен.
Бля думаю какого хуя. Хуй с ним, пробую ещё и нихуя не опять пишет что изображение удалено. Решил поискать в Яндексе, по картинкам, и оно мне всё нашло, откуда эта картинка.
Ёбаный гугл.
цензура
Ты дальше ещё сильнее охуеешь с кода, который "не вставлен в книгу". Возьми вот эту ссылку https://mitpress.mit.edu/sites/default/files/sicp/code/index.html , она тебе понадобится.
Интегралы
Школьная математика за 10-11 класс по сути.
>>274717
О, свежая кровь, добро пожаловать :3 Ну смотри, допустим у тебя 10 рублей надо разменять монетами по 1, 2 и 5 рублей. Просто возьми и распиши на листке все возможные варианты. То есть это будет: все способы разменять монетой в 1 рубль, в 2, в 5, в 1 и 2, в 1 и 5, в 2 и 5 - и все это просуммировать. Теперь разделим все варианты на две группы: с использованием 5-рублевой монеты и без. То есть общее число способов - это сумма числа способов а) без 5-рублевой монеты и б) с ней довольно очевидно. Это - первое подчеркнутое предложение с твоего пика. Теперь второе. Если мы используем 5-рублевую монету, то мы ее должны употребить хотя бы один раз. Но тогда у нас получается, что 10 рублей мы размениваем 5-рублевой монетой, и у нас остается еще 5 рублей. И эти оставшиеся 5 рублей мы можем разменять еще сколькими-то способами, и каждый такой способ соответствует способы размена всех 10 рублей, если к нему добавить 5-рублевую монету. То есть допустим мы размениваем 5 рублей как 2+2+1, тогда 10 рублей - это 5+(2+2+1). И так далее, для каждого способа разменять 5 рублей у нас получается способ разменять 10 рублей: 5+(...). А если у нас этой первой 5-ки нет, то это значит, что мы вообще не используем 5-ки - а число способов разменять сумму без учета монет первого типа (то есть 5-рублевых) мы уже посчитали ранее. Makes sense?
Поддвачну вопрос. Сам дорешал сикп почти до конца, остались последние два задания самые ебучие, но вот монеты эти сраные никогда не понимал. Алё, призёры олимпиад по математике с задачками на сообразительность)))0)) тут есть? Поясните по хардкору за монеты.
Подозреваю, что переводчик, который написал такой перевод как минимум педофил, а то и собакоеб-зоофил, натирающийся собачьим говном и делающим подобные вещи целыми днями.
А как ты упростил бы? Это не переводчик, просто на русском реально трудно подобные конструкции читать.
Вот хотя бы таким языком, чтобы ты сразу прочитал и понял. А не сидел и тупил, как долбоеб, что это за набор слов и что эта хуета означает.
:3
>>274987
В твоем варианте мало того, что ВООБЩЕ НИХУЯ НЕ ПОНЯТНО, так он еще и некорректный тащем-та.
>>274995
Ага, вместо "первый тип монет" писать "монеты наибольшего номинала из имеющихся". Ну хуй знает, то же самое, только букв больше.
>>275010
В каждом треде вроде по 10 раз все повторяют, что если учился в плохой школе без уроков программирования, не очень сообразительный, не можешь в математику и т.д. и т.п. - то для тебя есть htdp, книжка специально для школьников (а сикп - для студентов). Даже в факе написано "хтдп+сикп".
оп
нет
Я просто даун-гуманитарий, даже простые математические задачки не решал толком.
Объясните долбоебу, что делает эта функция. Русским, блядь, языком. Если объект в списке не найден, выводит #f, это я понял.
Там на 200 страниц меньше, уже вполне аргумент. И мол выкинули они ненужную хуйню.
(lambda (q)
(car (car q))))
Что делает эта функция? Ну хорошо, первым car берет первый объект списка. При раскрытии скобки единственный элемент берет еще раз?
Или учет на то, что изначально в q будет список из списков, первый car возьмет первый список, а второй car из этого списка возьмет первый элемент?
(lambda (q)
(set-car! q (cdr (car q)))))
В догонку эту функцию. Она тоже изначально, что q это список списков, потом от первого списка берет cdr ? Просто других вариантов не вижу.
дебильный оп, как вы уже догадались
Есть такая тупая, но готовая за хозяина пасть порвать штука, как документация. Вот смотри: https://groups.csail.mit.edu/mac/ftpdir/scheme-7.4/doc-html/scheme_8.html#SEC78
Там даже примеры приведены, специально для тупеньких, и явно написано, что memv - тоже, что и memq, просто использует для сравнения eqv? , а не eq? .
> Или учет на то, что изначально в q будет список из списков, первый car возьмет первый список, а второй car из этого списка возьмет первый элемент?
Да.
>В догонку эту функцию. Она тоже изначально, что q это список списков, потом от первого списка берет cdr ?
Да.
Ну или не список списков, а список с парами (cons'ами). Список - это, как ты наверняка уже знаешь, частый случай cons'а, у которого cdr'ом хвост списка, а не просто какой-то рандомный скалярный элемент (т.е. число там какое-нибудь или строка).
Вот видишь, уже начинаешь шарить и без нас.
> Она тоже изначально, что q это список
А ещё ты случайно бутылку колы.
>базы подключить
Что за базы ты упоминаешь уже два поста? Ты уже до реляционных баз данных добрался? В HtDP же вроде про это нет.
Да не, функции, которые изначально в ракете не прописаны. Нужно куда-то там закинуть, че-то там сделать, чтобы каждый раз их не расписывать. Голову ебал месяц назад, так хуй осилил и бросил. Теперь с новыми силами и мыслями буду опять пробовать.
А. Успехов, чо
Ну то есть она просто ищет элемент в списке, а когда находит его, возвращает и этот элемент, и все оставшиеся элементы (в отличие от memq, которая возвращает только сам элемент). Иными словами, она выкидывает начало списка до искомого элемента, и возвращает все что после него.
Почему бы тебе не взять и не проверить самому? Практика - критерий истины же.
Алсо, на твоём видеорелейтед самый пассионарный персонаж всего русского кинематографа. Когда вырасту, я хочу стать как он.
Двачую оратора выше. Как-то странно спрашивать на зекаче, что вернет твоя функция, когда ты можешь, блждад, взять и запустить сам.
Алсо, нацепите пожалуйста кто-нибудь аниме им на лица и поставьте войсовер "ты же сикп читаешь, няша, надо говорить правильно"
Давайте по порядку, как с конченным дебилом, разберемся с этими модулями. Создал два файла с одной функцией - другие докинуть потом не будет проблемой, сейчас бы все подключить. Внутрянка у них правильная, не надо ничего дописывать? И это нормально, что ракета на #lang ругается?
>>278098
А ты делай, как я - смирись с тем, что ты дебил, и все будет заебись :З
>>278120
Няша, я перед sicp немного clojure делал (рекомендую Living Clojure, там интересные упражнения), и постоянно были проблемы с подключениям репла/проектов в редактор. В итоге плюнул на всё, и решил попытаться в emacs, который до этого три раза бросал. Так вот, переключение между scheme/clojure/racket/любым лиспом делается в несколько клавиш, очень удобно, рекомендую. Буквально за два дня настроил и разобрался в основах, после этого никакие мануалы вообще не читал (мне этого хватает пока, и да, многие конфиги я скачал готовые).
Да мне бы с этим одним разобраться, а то переключение какие-то между языками. Тут-то оно уже как родное, уже и силы были потрачены, советов дана хуева гора. Мне кажется уже на самом пороге решения всей этой хуйни. Ну и люди тут знают, что куда, так что пока буду пробовать это домучать. Но за совет спасибо.
Понимаю, у меня emacs всегда ассоциировался с HEXом, над которым нужно танцевать день и ночь. В общем, нужно время и интерес/мотивация, чтобы начать.
Хорошо, двигаемся дальше. Первый файл ругаться перестал. Второй на #lang ругаться тоже перестал, но начал ругаться на первый файл.
Ну если ты посмотрел решение и разобрался, то на следующий день просто по памяти напиши рабочий алгоритм - и все, двигайся дальше, с этого упражнения ты получил все, что нужно. Суть же не в том, чтобы выебываться перед кем? перед собой? тем, сколько упражнений ты решил и какой ты охуенно умный, суть в обучении.
Ты создал? Что ты создал? Пиши полные пути к своим файлам, телепаты все в отпуске как бы. Алсо, не используй на всякий случай пробелы в именах файлов, в венде постоянно с этим какая-нибудь хуйня вылазит. Ну это так, общие соображения.
У тебя же
>Language: Beginning Student
стоит, включи обратно полноценный рэкет (ты ж вроде включал уже), student-языки - это для тех, кто по хтдп занимается.
Алсо, нахуя ты ОДНУ И ТУ ЖЕ ФУНКЦИЮ в обоих файлах написал? Ты что, ебанутый? Тебе нужно из одного модуля импортировать (переиспользовать) функцию в другой, чтобы два раза ее не писать, але блядь, привет. Ух бля, ну-ка создал lib.rkt и main.rkt, быстраблядь! В либ.ркт положил свой скваре, в мейн.ркт написал (require ...) и какую-нибудь хуйню навроде (define foo (x) (square (+ x 1)), запустил кабанчиком, проверил циферки, хуль ты смотришь? Делай давай, блядь!
Ты ебанутый? Нахуй ты ему имакс советуешь? И алсо у тебя на пике ты репл внутрь модуля перемещаешь, а ему надо разобраться с подключением модулей (и самой концепцией модуля, кек).
>>278146
Ну вот, не зря я в прошлом посте написал про пробелы и попросил запостить полные пути к обоим файлам, лол.
Опять пиздец и не там? Просто была непонятка еще с первого итт, там то папка db от слова дебил, который оп то еще какая-то, которой и в директории нет.
>>278164
Ну оба файла у меня в одной папке, если ты об этом.
Переименовал первый файл в lib.rkt, дописал в него строчку (provide square), появилось какое-то окно блядь голубое, как его убрать?
Переименовал второй файл в main.rkt, удалил из него функцию, дописал строчку (define (foo x) ...). На первый файл ругаться перестало, видать правда дело в пробеле было. НАчал на многоточие ругаться.
Ладно, давай как с четырёхлетним аутистом, который не умеет в абстрактное мышление. Напиши в main.rkt после строчки с requre строчки
(define (foo x) (square (+ x 1))
(display (foo 1))
и запусти. Компрене?
>Просто была непонятка еще с первого итт, там то папка db
Тебе твои файлы совсем не обязательно хранить там же, куда установлен сам рэкет. Обычно их кладут куда-нибудь в мои документы, или как там у вас на венде это называется. И пиши на латинице (маленькими буквами), типа projects/mylib/main.rkt
>>278197
Блядь, ну ты сам разве не видишь, что там опечатка со скобкой?
>>278198
А, ну вот, видишь. Только теперь подумай, что ты написал.
(define (foo x) (square (+ x 1)))
(display (foo 1))
Ну вот, могешь же, когда хочешь, кек.
Перенес в мои документы, теперь адрес такой C:\Users\1\Documents\projects\mylib\lib.rkt
Ну второй файл в той же папке.
Вот, перенес скобку, вычислило 4.
Ну ок, дальше что делать?
Ну все, ты разобрался, как работать с модулями: разносить функции по разным файлам и импортировать эти функции в другие файлы.
>Ну ок, дальше что делать?
Ну видимо попробовать осознать, что ты сейчас сделал, прочитать еще раз первый параграф https://docs.racket-lang.org/guide/module-basics.html - ну и что ты там изначально хотел сделать, засунуть все свои воспомогательные функции в lib.rkt, не?
>>278207
У тебя два рэкета что ли открыто? Подозреваю, что нужно нажать замочек, кек.
Я нажимал замок, он то открывается, То закрывается, но окно висит. Но сейчас открыл тот файл, уже нет этой хуйни. Да и хуй с ним. ушло и в рот ебать.
Такой вопрос, вот у меня ракета на рабочем столе ссылка. Вот я захожу в нее и вся эта хуйня сразу работать начинает, что сейчас наляпал? Ну хотябы эту функцию "зашквар", в квадрат которая возводит. Или блядь нужно теперь каждый раз в документы ползать и оттуда заходить в файл main ?
Ну так у тебя же может быть сколько угодно файлов и проектов. Откуда ракетка знает, над каким ты сейчас хочешь работать? Нажимаешь ctrl+O (или open file через меню) и выбираешь нужный файл. Ну как в ворде, блин. Не знаю как в венде, в линуксе там по умолчанию показываются все файлы, которые ты недавно открывал.
Алсо, там же в настройках можно включить табы, ну чтобы было одно окно с несколькими табами, а не по окну на каждый файл, имхо так удобнее.
Я открыл сейчас через опен файл, высветилось второе окно, ну открывал lib.rkt, в нем написал зашквар 3, он их зашкварил в 9. Но блядь я файл переделаю, будет простыня огромная из всех этих расшифровок и всегда будет висеть она сверху? Тогда смысл всего этого, когда можно было тупо копипастить и не ебсти голову с модулями?
Она у тебя будет в другом файле, простыня твоя. В lib.rkt у тебя будет простыня, а использовать эту простыню ты будешь во всех остальных файлах. Будет у тебя файл chapter1.rkt для упражнений из первой главы той книги, которую ты сейчас читаешь. Там ты сделаешь require и тебе будут доступны все функции из lib.rkt. Потом у тебя будет файл chapter2.rkt для упражнений из второй главы. Там ты тоже напишешь одну строчку с require и у тебя тоже будут доступны все функции из lib.rkt. Тебе не придется копипастить все в два разных файла. Потом если вдруг найдешь ошибку в какой-нибудь функции в lib.rkt, то ты ее один раз исправишь, в одном месте, и она (уже исправленная) сразу будет доступна и в chapter1.rkt, и в chapter2.rkt. А если бы ты копипастил, тебе бы пришлось в каждом файле ее исправлять (и в каждый файл копипастить все функции).
Я сейчас не sicp и не htdp читаю, а книгу для полных даунов.
Ну смотри, у меня первое окно открывается, когда я программу запускаю. С него открыл lib.rkt, с этого уже открыл новый файл, в нем попытался вбить (require lib.rkt), ну чтобы в нем работало. Блядь, мне опять это говно с замком вылезло, на этот раз уже вообще нахуй на весь экран блядь.
>Я сейчас не sicp и не htdp читаю
Без разницы, там ведь тоже главы наверное есть, не? Ты же вроде книжку про scheme от самих авторов scheme читал, емнип.
>у меня первое окно открывается
На всякий случай еще раз скажу, что там в настройках есть "open files in tabs instead of new windows", или как-то так, чтобы первое окно было и единственным, а файлы открывались в табах. Имхо так гораздо удобнее, хотя дело вкуса конечно (особенно если у тебя монитор большой).
>С него открыл lib.rkt
Ну можешь не открывать, если ты там ничего менять не собираешься.
>(require lib.rkt)
Неправильно. Сравнивай с https://docs.racket-lang.org/guide/module-basics.html и ищи ошибку.
>>278231
Ну или тред буквально на пару постов выше проскролль и посмотри.
Увидел, что кавычек не хватает, но не помогло, значит что-то другое. Ладно, пойду чайку заварю, да буду статью читать. Спасибо за терпение, няша.
>Он гавкает, мол lib.rkt не понимает, что такое. Блядь, как оно заебало.
А надо так, в кавычках
>"lib.rkt"
>Увидел, что кавычек не хватает, но не помогло, значит что-то другое. Ладно, пойду чайку заварю, да буду статью читать. Спасибо за терпение, няша.
Файл должен в той же директории находится, что и файл из которого ты делаешь require.
Ты реквайреш из утилитед3, ты уверен что на диск его сохранил?
Ну файлы lib и main сохранены. Просто у меня на рабочем столе значок ракеты, я его открываю и пытаюсь это сделать. Грубо говоря нужно пустой файл создать в той же папке, где два вышеуказанных, открывать его, в нем прописывать (рекурва либ) и все будет ок?
> Грубо говоря нужно пустой файл создать в той же папке, где два вышеуказанных
Просто открой main.rkt и там пиши. Но если прям нужен еще один файл - то да, создаешь в той же папке и делаешь require. Про относительные пути я даже не заикаюсь пока.
Сколько, сука, времени и нервов было потрачено на это говно, пиздец. Короче создал пустой файл в той же папке, ярлык скинул на рабочий стол, с ярлыка зашел, записал пикрилейтед и все сработало, осталось только другие функции туда захуячить, некоторые из них поправить, т.к. почему-то ракета ругается.
Последний вопрос на сегодня как это говно ебаное справа убрать? Приходится на весь экран программу растягивать.
>>278253
Чтобы заходить в два щелчка мышки, а не ползать в документы и куда там еще.
>ПОЛУЧИЛОСЬ, ЕБАНЫЙ БЛЯДЬ В РОТ
Кек, конгратс! Можешь открывать пивас.
>как это говно ебаное справа убрать?
Я ж тебе уже говорил - на замочек нажми (ты ж его сам и закрепил там, лол, по умолчанию оно скрыто).
>Чтобы заходить в два щелчка мышки, а не ползать в документы и куда там еще.
Ну просто будет у тебя больше файлов - все их тащить на рабочий стол будешь? Имхо, дурацкая привычка, во всем должен быть порядок. Хотя у тебя-то кучи проектов на машине нет, так что в принципе конечно похуй...
>>278257
Да, вот так все-таки правильнее всего :3
>Последний вопрос на сегодня как это говно ебаное справа убрать? Приходится на весь экран программу растягивать.
С кофемолки пишешь?
Нажми на замочек, чтобы он открытым стал.
После этого окошечко будет само собой прятаться, когда мышкой на него не наводишь .
>Сколько, сука, времени и нервов было потрачено на это говно, пиздец.
Я конечно же восхищаюсь твоим стремленеием изучать Ракет, но у тебя очевидно недостаток общей компутерной грамотности.
Так то тебе будет сложно без этого.
Читнул бы какую нибудь книжку типа виндовс для чайников
\командная строка виндовс или что-то тому подобное.
Ты же тян?
>Хотя да, удалил нахуй этот ярлык, просто захожу в прогу с рабочего стола, а в ней через файл открываю тот файл. Сохранил сразу в нем фразу (рекурва либ), теперь заебись, можно сразу заходить и печатать, что нужно.
Сделай ярлык НА ПАПКУ со своими файлами.
>Можешь открывать пивас
Да у меня че-то аллергия в последнее время на темное пиво, пятнами блядь покрылся, придется клюквенную настойку пить. А пиво-то люблю, как наберу всякой хуйни - сухарики, чипсы, орешки, рыбку, пиццу закажу..ммм, а тут блядь настойку придется. Но не сегодня, хотя сегодня предлагал пацану бухнуть, тот че-то в залупу залез. Ну зато здесь разобрался, как и что, это дорогого стоит. НАчинал-то голову ломать месяц назад и только сейчас понял. И то с вашей помощью, сам по себе еще дня 3 потупил бы, да пошел кому-нибудь деньги платить, чтобы разжевали, как долбоебу.
>на замочек нажми
Я нажимал, оно хуй куда уходило. Сейчас нажал, а оказалось нужно было мышку сдвинуть с программы, тогда эта хуета сворачивается. Короче тоже победил.
Спасибо еще раз, без вас бы правда за деньги пошел бы куда-нибудь узнавать, уже правда бесить начинало.
Итак, будем двигаться дальше. Сейчас все функции нужно будет скинуть в тот файл, но некоторые из них еще разобраться, почему работать отказываются, хотя копипастил с учебника и не менял.
После разбора функций буду дальше учебник штурмовать, 2 главы осилил, осталось еще 10. А потом, глядишь, на хтдп и сикп переключусь и уже побыстрее пройду, тупо зная команды языка и хоть как-то понимая всю эту логику, а то с нуля начинал, там просто пиздец. Ну вы и сами видите, насколько я интеллектуал, лол.
Нет, не тян. хотел было пошутить, что много общего, члены там люблю и в жопу, но доска вроде не та, лол
Ну если ты достаточно няшный, то клозе инаф фор ми.
>Ты же тян?
Проиграл с такой предъявы.Но насчет общей компграмотноти двачую.
>>278262
Нахуя? Проще и логичнее из самой ракетки открывать, имхо.
>>278263
>да пошел кому-нибудь деньги платить
Если надумаешь, советую вот этого поца в пинджаке: http://erlang-mnesia-video.ru/
>А потом, глядишь, на хтдп и сикп переключусь
Мне кажется тебе необязательно все 12 глав заканчивать, чтобы хтдп начать проходить. Скинь еще раз ту книжку, которую читаешь, - у меня просто подозрение, что там ближе к концу идет уже описание всяких сложных штук типа макросов, которые логичнее как раз после хтдп (и сикпа) разбирать.
>>278265
>доска вроде не та
Тут каждая доска та, если ты понимаешь, о чем я ;););) ( ° ʖ °)
https://www.scheme.com/tspl4/
Вот эта книжка. не, тему пидоров все-таки не хотелось бы развивать, а то мои посты, в т.ч. оп-пост потрут и пиздец
Ну первые 2 я уже осилил. Правда упражнения во второй половине второй главы уже не осиливал. Ну попробую 3 почитать, там посмотрю уже, как и что. Все-таки это уже пятая книга, которую я начал и бросать ее в тот момент, когда она идет вроде бы неплохо, не хотелось бы.
>осилил
>Правда упражнения во второй половине второй главы уже не осиливал
))
>бросать ее в тот момент, когда она идет вроде бы неплохо, не хотелось бы.
Ну я бы не назвал это "бросанием". Просто это же реально не учебник по программированию, который надо читать последовательно, а справочник по языку (с примерами и объяснениями). То есть она сразу охватывает все возможности языка (третья глава начинается с макросов), которые тебе пока не особо нужны и скорее тебя только запутают. Ну посмотри, но не забывай, что самое важное - это упражнения.
>>278280
Лол
Я так понял, что упражнения не мог осилить, Т.к. толком не мог разобраться, что делают функции. Сейчас они описаны у меня и наверно уже получилось бы их решать. Короче попробую дальше пойти, пока такой план, а там, если что обратно на хтдп перекачусь. В любом случае я иду вперед, стремлюсь, ебу голову, собираю инфу, короче продвигаюсь. Сегодня реально прорыв произошел, т.к. подключил эти ебаные модули.
насчет дебила - ну должно же быть в человеке что-то хорошее, вот у меня самооценка здоровая :)
Ну то есть что например вот эти строки значат?
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
Ну там в конце второй главы тоже относительно сложные упражнения в принципе. Я бы на твоем месте прорешал или хотя бы просто разобрался в решениях (быть может с помощью джвачика) до упражнения 2.8.7 включительно, и дальше пошел бы уже самостоятельно делать хтдп.
ну вот, а ты говорил, что второго нету, лол
>>278290
>Объяви функцию "квдртнкрнь" от двух аргументов ("догадка" и "икс"): если наша догадка достаточно-хороша, то ее и вернуть; в противном случае, вызвать квдртнкрнь с новой (улучшенной) догадкой и тем же иксом.
Ну я тогда отредактирую функции, которые работать не хотят, а потом прорешаю 2 главу.
не, до его уровня мне далеко. Ну хотя если по ходу его книги те функции расписывались, то может и правда мы с ним одного поля ягоды
Ребят а где обучиться Ракету чтобы на нем задачки решать? И где можно достать решения задач на нем чтобы проверить себя?
Спасибо за объяснение, но объясните ещё плиз: была функция с названием sqrt-iter и формальными аргументами guess, x.
Потом в случае неудачи выполняется эта же функция, но уже с аргументами improve, guess, x. Я так понял, что guess меняется на improve, а почему по той же логике x из первой скобки не меняется на guess из второй, получается, замена идёт только для первого аргумента? И зачем в конце x?
Извиняюсь за такие нубские вопросы если что.
Лично я использую ide (GNU/Emacs) для написания всего, вплоть до текста этого поста. Но при чем тут я?..
>>278450
https://htdp.org/2018-01-06/Book/
>>278558
>но уже с аргументами improve, guess, x.
Нет, ты в глаза ебешься?
(sqrt-iter (improve guess x) x)
guess заменяем на (improve guess x), improve - это еще одна функция, дальше по тексту смотри.
>а почему по той же логике x из первой скобки не меняется
Потому что ты все еще считаешь квадратный корень того же самого числа, не?
Я занимаюсь разработкой БД, параллельно учусь на четвёртом курсе в тех. вузе. В этом вузе появился предмет, связанный с языком lisp. Я уверен, что смогу сдать этот предмет не прилагая усилий. Например, я могу купить решенные задачки и скатать со шпор на экзамене, но могу подойти с другой стороны, например, осилить эту книжку.
В чём, собственно говоря, вопрос? Какие преимущества, связанные с моей будущей карьерой, я смогу получить, если вложу усилия в работу с этой книгой? Может я стану умнее и смогу решать задачки на собеседованиях? Или я смогу ответить на большинство вопросов связанные со структурами данных? Может ли дать эта книга хоть какой-то продуктив?
Толсто, слишком толсто, попробуй в другой раз.
> > выразительная вежливость выдает мошенников
> > :
>Вам
>Не сочтите его как какую-нибудь агрессию
>буду благодарен
> > наивные вопросы "студента 4-го курса"
> > намеренное занижение интеллекта
> > подчеркнутое "незнание" темы вопросов
> > :
>преимущества, связанные с моей будущей карьерой
>Может я стану умнее и смогу решать задачки на собеседованиях
>смогу ответить на большинство вопросов связанные со структурами
>данных
>хоть какой-то продуктив
Если бы ты был студентом 4-го курса, ты бы не задавал такие вопросы, а на большинством из них знал бы ответ. Если все же правда, то советую сменить карьеру.
Ну а это вообще пушка:
> появился предмет, связанный с языком lisp
> осилить эту книжку
Это в каком вузе в 2018 году преподают лисп, да ещё, где требуется читать SICP.
> я могу купить решенные задачки и скатать со шпор на экзамене
Как уже написал выше, подумай над тем, чтобы поменять направление в жизни. Спасибо, я кончил.
Толсто, слишком толсто, попробуй в другой раз.
> > выразительная вежливость выдает мошенников
> > :
>Вам
>Не сочтите его как какую-нибудь агрессию
>буду благодарен
> > наивные вопросы "студента 4-го курса"
> > намеренное занижение интеллекта
> > подчеркнутое "незнание" темы вопросов
> > :
>преимущества, связанные с моей будущей карьерой
>Может я стану умнее и смогу решать задачки на собеседованиях
>смогу ответить на большинство вопросов связанные со структурами
>данных
>хоть какой-то продуктив
Если бы ты был студентом 4-го курса, ты бы не задавал такие вопросы, а на большинством из них знал бы ответ. Если все же правда, то советую сменить карьеру.
Ну а это вообще пушка:
> появился предмет, связанный с языком lisp
> осилить эту книжку
Это в каком вузе в 2018 году преподают лисп, да ещё, где требуется читать SICP.
> я могу купить решенные задачки и скатать со шпор на экзамене
Как уже написал выше, подумай над тем, чтобы поменять направление в жизни. Спасибо, я кончил.
>Это в каком вузе в 2018 году преподают лисп, да ещё, где требуется читать SICP.
У нас на первом и 2ром курсах преподавали в рамках общего знакомства с AI.
Но это было конечно 10 лет назад.
И да, согласен, какой-то припезденный тролль.
Сильно.
Хуй знает, по-моему студенты делятся на тех, кто покупает лабы, и на тех, кто эти лабы продает. Так как ты относишься к первой категории еще и на 4 курсе, никакие лиспы, сикпы, алгоритмы и задачки на собеседованиях тебе не нужны.
Ну, это так, взгляд со стороны.
Имхо, если будешь не просто смотреть, а разбираться и потом воспроизводить самостоятельно - нормально, ничего плохого.
Одну секунду.
Как я уже писал, у меня на данный момент уже есть работа, с доходом выше чем у тех, кто продает вузовские задачки. И конечно же, я знаю алгоритмы. Просто я хочу тратить свое время рационально, по этому и задаю такие вопросы.
Хорошо, я оговорился. Тратить не время, а усилие.
Смотри, условно я получаю удовольствие от миньета проститутки и скуриванием косяка кококо не программист. Если я вложу усилия в эту книгу, какой фитбэк я получу?
Никакого. Но лучше тебе было бы научиться получать удовольствие от таких вещей, потому что иначе ты быстро выдохнешься и станешь несчастным - типа, как бы побыстрее с работы быстрее убежать косяк покурить.
SICP это очень философская книжка, и это отличает раба от гражданина.
Есть ли какой-то аналог "eq?", который будет сравнивать изображения не по их структуре, а именно как они выглядят?
по совместительству вопрос, никто не знает, есть какой-нибудь простой способ сделать заливку в изображении? Ну, как в Paint
Чтобы через big-bang, к примеру, кликал на квадрат и он менял цвет на нужный (именно квадрат, не заходя за пределы)
Ну анон, тебе как-то яснее выражаться надо. Алсо, я понятия не имею, какой у тебя уровень, чем ты собираешься по жизни заниматься, и вообще ты не предоставил никакой информации для ответа на твой вопрос. Раз ты на 4 курсе и работаешь, то ты наверное уже должен давным-давно знать и алгоритмы, и структуры данных, и задачки на собеседованиях уметь решать? Если нет - то непонятно, чем ты все это время занимался, см. предыдущий пост про покупающих студентов (но опять же, ты вроде говоришь, что ты не такой). Книжка-то вообще-то для первокурсников (ладно, очень сообразительных первокурсников). Подавляющее большинство отзывов о ней от уже опытных разработчиков, читавших ее далеко не на заре карьеры, - да, интересно и полезно, стал более лучше одеваться писать код. С другой стороны, раз ты БД делаешь, то ты байтоеб - может тебе это и не нужно и не интересно, может ты вообще потом в ебмеддед хочешь. А может и нужно и интересно - я не знаю, а ты не говоришь. В любом случае, ты ведь можешь прочитать оглавление и сам сделать какие-то выводы, не?
с квадратом всё понятно, мне нужен универсальный вариант
а как сравнить попиксельно? то есть, как выделить определённый пиксель изображения?
я хочу сделать таким образом:
допустим кликаю внутри квадрата, незакрашенного
там, к примеру, белый цвет внутри
дальше от каждого пикселя всего изображения поочерёдно рисую линию белого цвета до того пикселя, на который кликнул, если старое и новое изображение равны, значит преграды в виде другого цвета, в данном случае грани квадрата, нет, и можно заменить пиксель на нужный цвет
и так со всеми пикселями
вернее не от каждого пикселя, а от тех, которые белого (того же) цвета
и проблема в том, что когда нарисую эту дополнительную линию, через eq? всё равно результат будет false => мне нужна замена eq?
если нужно самому написать, то у меня только вопрос, как сравнить попиксельно
Послушай, формулировка как нужно для кого-то не совсем верная. Я сам не знаю, что меня ударит в голову и кем я захочу стать. Я хочу понять, зачем она нужна вообще?
и что ты имел ввиду под "переведи в битмап", зачем?
я сохраняю в bmp, открываю в bmp, всё равно изображение тоже (в структурном плане, внешне понятно, что тоже самое)
Эта книга лучшее что может быть из Introduction to Computer Science, она дает фундаментальные знания с точки зрения архитектора систем, а не просто потребителя фреймворков; она - это начало пути, который займет годы, а не этап, после которого можно говорить о каких-то конкретных результатах.
Другими словами - если ты хочешь быть виртуозо в программировании, то эта книга обязательна в твоей толстой библиотеке судя по всему нет, и это твой выбор. Если тебе нужно рубить бабло - ищи способы рубить бало.
>мне нужен универсальный вариант
Ну я ж говорю, в общем случае - гугли поиск пути, это практически то же самое. У тебя ведь есть точка и некая область вокруг нее того же цвета, а все пиксели другого цвета - это как бы "стены", и тебе нужно найти все точки в изображении, в которые есть путь из начальной точки. Смекаешь?
>а как сравнить попиксельно?
Для начала вкури документацию: https://docs.racket-lang.org/teachpack/2htdpimage.html#(def._((lib._2htdp/image..rkt)._image-~3ecolor-list))
>рисую линию белого цвета до того пикселя, на который кликнул
А с чего ты взял, что у тебя по прямой путь должен быть путь до твоего пикселя? Смотри, представь у тебя белое изображение, и посередине черная горизонтальная полоска почти на всю ширину (но не до конца, по бокам проход остается). С твоим алгоритмом если кликнуть в нижней части и потом взять пиксель в правой части и провести между ними прямую линию, она наткнетяс на черную полоску, и ты ничего не закрасишь. А на самом деле тебе надо закрасить все изображение. Хинт: ты описал алгоритм освещения (рэйкастинг), в 2д играх часто такой используют для отрисовки области видимости персонажа: пускаем из персонажа прямые линии во все стороны и рисуем сцену там, где эти линии не пересекаются со стенками. Смотри: https://srdja.github.io/raycaster-demo/ (на кложе)
>Я хочу понять, зачем она нужна вообще?
Ну это хорошее введение в алгоритмы, дизайн программ, функциональное программирование и компьютер сайенс. Там много неплохих упражнений (уровня задачек на сообразительность с собеседований), плюс тебя систематически обучают именно дизайну алгоритмов и программ, плюс тебе рассказывают, как работают сами языки программирования (какие есть модели вычислений, какие есть распространенные оптимизации, как написать интерпретатор\компилятор, и т.п.)
То есть это введение в программирование и дизайн программ, где в качестве предметной области сами программы, как-то так. Не уверен правда, что это понятное объяснение, кек
>Не уверен правда, что это понятное объяснение, кек
Нет достаточно понятных объяснения для даунов. Так что пойдет.
Interactions disabled
Есть вариант сделать так, чтобы всё не шло пиздой при больших рисунках? Чем проще делаю код, как-то хитрю, тем более большие рисунки обрабатывает моя заливка
Но всё равно есть предел, при котором "Interactions disabled"
Конечно есть, попробуй помолиться ктулху, есть еще вариант приложить подорожник к монитору. Телепаты ушли настойку пить, твой код не видно как бы
за говнокод сразу извините
ну так намекнули, чтобы скинул
там разбираться в 1/4 кода максимум, если учитывать мой вопрос, а не смотреть тупо весь код
Нахуя ты все в лямбду обернул? Что за ебанутые имена с миксом из заглавных и нормальных букв? Нормально оформить код аллах запрещает, хотя бы пустые строки между дефайнами поставить? Что вот это за пиздец:
>((and (= (car (cdr (cdr x))) 2) (>= My (+ 25 (* (car (cdr (cdr (cdr x)))) 0.5))) (mouse=? B "button-down")) (cons (car x) (cons (cons `(,(make-coord Mx My)) (car (cdr x))) (cdr (cdr x)))))
???
>((and (zero? (car (cdr (cdr x)))) (>= My (+ 25 ( (car (cdr (cdr (cdr x)))) 0.5))) (mouse=? B "drag")) (cons (place-image (Figure x) Mx My (car x)) (cons (cons (make-coord Mx My) (car (cdr x))) (cdr (cdr x)))))
((and (= (car (cdr (cdr x))) 1) (>= My (+ 25 ( (car (cdr (cdr (cdr x)))) 0.5))) (mouse=? B "button-down") (false? (empty? (car (cdr x)))) (list? (car (car (cdr x)))) (= (length (car (car (cdr x)))) 1))
(cons (scene+line (car x)
(coord-x (car (car (car (cdr x))))) (coord-y (car (car (car (cdr x))))) Mx My
(make-pen (car (cdr (cdr (reverse x)))) (car (cdr (cdr (cdr x)))) "solid" (?Form (car (cdr (reverse x)))) (??Form (car (cdr (reverse x))))))
(cons (cons (cons (make-coord Mx My) (car (car (cdr x)))) (cdr (car (cdr x)))) (cdr (cdr x)))))
((and (= (car (cdr (cdr x))) 1) (>= My (+ 25 ( (car (cdr (cdr (cdr x)))) 0.5))) (mouse=? B "button-down")) (cons (car x) (cons (cons `(,(make-coord Mx My)) (car (cdr x))) (cdr (cdr x)))))
((and (= (car (cdr (cdr x))) 2) (>= My (+ 25 ( (car (cdr (cdr (cdr x)))) 0.5))) (mouse=? B "button-down") (false? (empty? (car (cdr x)))) (list? (car (car (cdr x)))) (= (length (car (car (cdr x)))) 1))
(cons (scene+line (scene+line (scene+line (scene+line (car x)
(coord-x (car (car (car (cdr x))))) My Mx My
(make-pen (car (cdr (cdr (reverse x)))) (car (cdr (cdr (cdr x)))) "solid" (?Form (car (cdr (reverse x)))) (??Form (car (cdr (reverse x))))))
Mx (coord-y (car (car (car (cdr x))))) Mx My
(make-pen (car (cdr (cdr (reverse x)))) (car (cdr (cdr (cdr x)))) "solid" (?Form (car (cdr (reverse x)))) (??Form (car (cdr (reverse x))))))
(coord-x (car (car (car (cdr x))))) (coord-y (car (car (car (cdr x))))) Mx (coord-y (car (car (car (cdr x)))))
у меня там функция в этом коде, которая любой элемент возвращает, нахуй мне твои cadr, долбоёбище
если мне так удобнее, значит мне так удобнее
а твоё ебаное мнение я не спрашивал
и даже если нужно обрезать список, у меня опять же там функции Cut и UnCut, которые сам написал
и они будут удобнее твоей параши
Кек, точно.
>>281131
>если мне так удобнее, значит мне так удобнее
Анон, если ты устроишься на работу, накодишь первый таск, а потом на код-ревью в ответ на справедливые претензии лида, что у тебя ебаный говнокод, в котором не разобраться, скажешь "если мне так удобнее, значит мне так удобнее, пошел нахуй", то тебя скорее всего уволят. Рефактори свой код, там совершенная лапша. Алсо, тормозит у тебя скорее всего из-за того, что ты налево и направо используешь reverse, и в коде наверняка куча мест с квадратичной сложностью - но, как я уже сказал, никто в таком адовом говне разбираться не будет, как минимум оформи код по правилам и убери эти наркоманские цепочки (car (car (car (cdr x...
>>281132
>Cut и UnCut
В scheme используется kebab-case, а не CamelCase.
Алсо, насчет этого двачую. Хотя если они тебе нужны, то скорее всего лучше использовать деструктуринг.
я разобрался с той проблемой
лимит памяти маленький был очень
ну а за reverse спасибо, буду стараться меньше его юзать
про то, что код говно, я знаю
я же не на заказ пишу, а для себя
> деструктуринг
В схемке разве есть? SICP дорешал почти до конца последнее упражнение осталось, про деструктуринг в нём вроде ничего не было. Гуглинг выдаёт только CL-евский loop.
>>281154
Лол, два чаю этому. За деньги наебошу любую парашу, лишь бы заработало, а пет-проекты вылизываю, как кот яйца.
Мой вариант решения сразу идет по списку текущих расстановок и пытается к каждой из них добавить очередную позицию.
https://pastebin.com/iYHD5ft4
Ну потому что там же в описании задачи рекурсивное решение, код просто его транслирует.
Да, все пошло спасибо. Правда некоторые функции работают, некоторые нет. Но пока сам попробую поразбираться.
Да, есть гейзер, и по-моему есть еще какая-то более новая штука, которая эмулирует слайм (но гейзера в принципе достаточно для написал-запустил).
Можно экспортировать все функции разом, если что, чтобы не писать каждое имя по отдельности.
>Измените apply-generic так, чтобы она не пыталась применить приведение, если у обоих
аргументов один и тот же тип.
Но зачем? Если оба типа приводимы к другому - мы успешно отработаем. Если такого приведения нет или операция не определена для приводимых типов тоже - будем ошибка. Это же нормальное поведение, нет?
(lambda (x y)
(proc2 y x)))
Оп продолжает ебсти голову. Есть функция, которая меняет местами аргументы. В ебанутом учебнике она написана как-то так. Но дальше по тексту там откровенная дичь, мол программа не будет ругаться и нормально сработает до того, как мы определили proc2, хотя по тексту касаемо proc2 там инфы нихуя и нет.
Суть вопроса - как подкорректировать программу proc1, чтобы она просто адекватно меняла местами аргументы?
у тебя всё и так правильно
типо если ты подставляешь в proc2, к примеру
пусть она будет такая
(define (proc2 a b)
(+ (* a 2) (- b 2)))
подставляешь короче, например
(proc2 5 10)
то возвращается определённый результат
а через proc1 ты меняешь местами аргументы прежде, чем подставить их в proc2
(proc1 10 5)
она вызовет (proc2 5 10)
всё
Спасибо, я понял. Ну а если я просто хочу местами поменять два аргумента? Ну блядь пришло у меня с какой-то функции Х У, а я хочу, чтобы дальше пошло У Х, как бы мне описать? Просто то, что ты пишешь, для меня пока сложновато, мне бы с чем-то более простым пока разобраться. Грубо говоря от того, что ты написал, я какой-то пользы не вижу, в смысле не представляю задачу, которая мне будет поставлена и это все пригодится.
cons - это для списков и пар
(cons 1 '()) - список с элементом 1
(cons 1 (cons 2 '())) - список с элементами 1 и 2
(cons 1 2) - пара с 1 и 2
и всё такое
типо у тебя просто вместо cons сделали ему другое название вдобавок к старому - proc2
Хорошо, спасибо, попробую это как-то переварить и описать в своем документе. Но наркомания однозначная, как я считаю. Там пикча выше, это описания proc1 и proc2, все блядЬ. больше ничего сказано не было.
Аноны, хочу прорешать книгу, но без ебли со схемой.
Можно ли для этих заданий использовать например js?
Или задания специально заточены под схему?
Ты можешь описать proc1 не имея proc2 в области видимости - это не будет ошибкой, но ты не можешь вызывать proc1 если у тебя не задан proc2. Введи код с картинки в той же последовательности - все будет работать пока ты не уберешь 4 строку.
Там все объясняется на схеме. Т.е. тебе полюбому придется читать ее, почему бы и не писать?
Можешь, в принципе, на любом языке решать сикп, но тут есть нюанс: схема дает тебе определенный уровень абстракции, уже поддерживаемый языком (функции, как объекты первого порядка, S-expression, динамическая типизация и т.п.), эти абстракции используются, как строительные блоки. Если в выбранном тобой языке их не будет, тебе придется реализовать их самому, или как-то изъебываться иначе.
Поэтому, зависит от того, какой у тебя опыт программирования вообще и опыт на языке, которым ты хочешь решать сикп, в частности.
Конкретно с JS, вроде, особых проблем быть не должно, даже если ты новичок в нем. Но вот если бы ты захотел решать сикп на Си, возникла бы куча лишних сложностей.
Книга не предполагает наличие у читателя знания схемы, там все походу про этот язык рассказывается.
Открой документацию, епта! Там же все написано, ссылку уже дюжину раз вкидывали.
Тут написано, что ты можешь определить proc1 до того, как определена proc2. То есть ты можешь определять свои функции в любом порядке. Если g использует f, то необязательно определять сперва f, а потом g. Можно и наоборот, если тебе кажется, что так другим людям потом проще будет читать твой код. Хотя тебе лучше этим не злоупотреблять, определяй всегда все в том порядке, в котором оно используется. Кроме того, это позволяет тебе определять взаимно-рекурсивные функции. Вот представь, что у тебя есть какой-то очень хитрый алгоритм, в котором proc1 вызывает proc2, а proc2 в свою очередь вызывает proc1. То есть они обе друг друга вызывают, получается как бы кольцевая зависимость (уроборос эдакий). И вот то, что описано у тебя на пикрелейтед, как раз и позволяет такие функции\алгоритмы определять. А если бы схемка требовала, чтобы все используемые символы и функции были определены через define до того, как они используются, то такой алгоритм ты бы написать не смог в принципе. Смекаешь?
>охуею разбираться со схемой
Если ты знаком с жс, то тебе часа два понадобится, чтобы разобраться со схемой на уровне, достаточно для сикпа. Блядь, да какие два часа?
f(x, y, z) -> (f x y z)
function(x, y) { return f(x, y) } -> (lambda (x y) (f x y))
var x = 42; -> (define x 42)
Все, можешь идти решать упражнения.
Хорошо, суть я понял. Спасибо.
Ну в жс как бы тоже префиксная: ты же пишешь f(x,y), а не x f y. Тут просто все униформно и нет никаких исключений для арифметики и прочей хуйни, все эти плюсы-минусы-умножения - это обычные функции. Так что арифметика записывается в префиксной нотации, да хотя одно из первых упражнений на работу с макросами - это как раз добавить инфиксную арифметику в язык, кек. Ну то есть сделать это легко, просто никому нахуй ненужно.
А вообще схема где-нибудь пригождается кроме упражнений?
Может на ней можно веб скрапить как на петоне или еще что нибудь полезного делать?
Двачую, бро. К сожалению, дальше там не лучше - десятка два упражнений в конце 2-й главы построены вокруг двух функций (put и get), которые не определяются и без них проверять решения очень неудобно или вообще невозможно. Хз зачем так делать, это пока единственный для меня минус книги.
Но я не знаю, как их описать. Они должны работать с неким глобальным пространством имен. В книге на момент конца второй главы, ничего не говорится о том, как реализовать нечто подобное.
(define count
(let ([next 0])
(lambda ()
(let ([v next])
(set! next (+ next 1))
v))))
Там еще с описанием залупа какая-то непонятная. Максимум, что смог вытащить из книги, что это какой-то счетчик. Скажите по русски, что он делает и как вводить переменные, чтобы проверить, работает ли. Есть подозрение, что считает, сколько раз значение возвращалось, но это не точно.
Пикрилейтед функция. Во-первых я так и не понял, что она делает, Вообще блядь не понял. Во-вторых копипастил из учебника в ракету функцию - не работает, копипастил красный шрифт в яндекс-переводчик, тоже ёбань какую-то выдает и не понятно, что не понравилось.
>>283091
Ну попробуй открыть другие главы и через поиск на странице поискать эти два ебаных слова, может дальше будут. Я в своем учебнике порыл, нихуя не нашел, может чисто сикповская функция, составленная авторами книги, я хуй знает.
Да не в этом дело. Они определяются в 3-й главе. Даже если бы не определялись вообще, естественно, я бы нагуглил, как их реализовать. Претензия именно в странном подходе - давать упражнения и скрывать часть информации, которая нужна для их выполнения.
Чем-то слоника сейчас напомнил, лол. Но там вообще ебаная наркомания, от которой я обблевался. Сикп начинал в самом начале читать, тяжелая книга и даже дело не в том, чтобы я тупой и с нуля, с дуру, начал ее читать. Были моменты, типа одна из функций шмонает список выражений, пока не встретит отличный от #t и выводит #f, в противном случае выводит значение последнего выражения. Вот блядь можно было расписать, что функция сама по себе обязана вывести какое-то значение и если из большого списка все истинны, то выводит значение последнего, т.к. какое-то значение все-таки должно быть. Это логика, блядь, которую можно понять и очень легко запомнить. А у них в той фразе нет логики, а тупое наставление, которое нужно зазубрить. ЭТо сейчас мне очевидно и хуй с ним, подобную фразу я смогу понять, но с нуля это невозможно, как я думаю.
По логике вводим список списков, а выводит в первом случае список из первых элементов, а во втором список хвостов списков. Только блядь у меня две ебаные функции на них упираются, а описания нет нихуя. Пошмонал 2 и 3 главы, нихуя нет.
https://racket-lang.org - да можно и веб-сервисы писать, и скрапить, и что угодно как бы. Алсо, оФФициальный скриптовый язык gnu - диалект схемы: https://www.gnu.org/software/guile/
>Не могу понять, что делают функции.
Ну так прочитай по частям. Смотри, ты определяешь count. Это функция, потому что у тебя там лямбда возвращается, так? Но вокруг этой лямбды есть еще let. И внутри лямбды тоже есть let, так? Разберись сперва, что происходит внутри лямбды. Ты сохраняешь текущее значение next в переменную v, потом увеличиваешь next на единицу, и возвращаешь v. То есть ты возвращаешь текущее значение next, а потом увеличиваешь next на единицу. Так? Вот смотри, а теперь вся суть: фишка в том, что твой next определен вне лямбды, точнее вокруг нее. То есть это как бы глобальная переменная (как если бы ты ее через define определил), состояние в ней сохраняется между вызовами функции. Попробуй прямо переписать код с (define next 0), и проверь, что все работает так же. То есть count - это функция, которая увеличивает глобальный счетчик. При каждом вызове она возвращает текущее значение счетчика и увеличивает его на единицу. НО из-за того, что в коде next определен не через define, а через let, ты никак не можешь его изменить, кроме как через вызов count. Если бы next был определен через define, ты бы еще в какой-нибудь другой функции мог написать (set! next 42), например, или просто в репле изменить его значение, потому что это глобальная переменная. А когда ты определяешь его через let (вокруг лямбды), ты никак не можешь его изменить, кроме как через вызов этой самой лямбды. То есть у тебя получается уже не глобальное (которое можно изменять хоть откуда), а локальное состояние, и четкий интерфейс, через который с ним можно взаимодействовать (только через твою функцию и никак иначе). Это называется инкапсуляция.
https://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html
tl;dr: из рэкета их удалили, потому что НЕНУЖНО.
Можешь сделать (require rnrs/mutable-pairs-6) и использовать set-mcar! и set-mcdr! (но это ненужно).
>>283105
>И только потом, наконец-то, идти дальше.
Ну, тебе уже на хтдп пора переключаться, если ты первые две главы прошел. Дальше ты там тупо не поймешь ничего, ибо это справочник (с коротким туториалом в первых главах), а не учебник.
Ну вот смотри, у меня есть две функции.
Эта добавляет элемент в конце очереди - хуй знает, что имели в виду в учебнике, но описание такое.
(define putq!
(lambda (q v)
(let ([end (cons 'ignored '())])
(set-car! (cdr q) v)
(set-cdr! (cdr q) end)
(set-cdr! q end))))
Вторая функция удаляет первый элемент. ТАк понял, что есть список списков, он берет первый список и возвращает cdr его. И описание сет-кар
(define delq!
(lambda (q)
(set-car! q (cdr (car q)))))
Ладно, давай так. Мне может на эти две функции хуй положить и на set-car!, set-cdr! вместе с ними?
Сейчас я выписал функции, которые были в первых двух главах. Стремлюсь к тому, чтобы они нормально работали и чтобы идти дальше, вот и туплю, Блядь. Третью главу не открывал еще, но если там правда тупой справочник дальше по книге будет - смысл в ней и правда сомнительный.
>и описание сет-кар
На эту фразу внимания не обращать, скопировалась из моего текстового документа.
Ну перепиши эти функции без set-car!, используя просто set! и обычные операции над списками. После этого переходи на хтдп, держа под рукой эту книжку в качестве справочника. Ты предыдущие задачи из первой+второй главы прорешал же?
Э, бля, чо галка где???
Кек, абу тебя наказал за харам! Извенись!!1
>>271806 (OP)
Я скачал IDE по ссылке с оп поста.
Установил.
Но судя по всему нужно настроить его, даже оп пост на это намекает.
>есть и поддержка Scheme, но её нужно включить
Поэтому и спрашиваю тут >>284282
> Аноны, подскажите что там нужно поменять в настройках DrRacket чтобы схема запускалась?
language > choose language > other languages > legacy languages > R5RS
или скачать "sicp", доп. язык для СИКПа, типо как какой-то стандарт схемы вроде, установить это расширение и писать каждый раз
#sicp lang
Честно ли разбивать процедуры на подпроцедуры?
Например 1.3 я разбил на 4 подпроцедуры, то есть в целом 5 дефайнов получилось.
Хоть на 10 разбей, кому какое дело как ты дрочишь?
Решил перерешать все задания 2 главы. Столкнулся с проблемой, сразу оговорюсь, было чувство, что эту хуйню уже приносил, но прошмонал предыдущий итт - не нашел.
Есть функция length, которая считает количество аргументов, т.е. length (a b c) выводит цифру 3.
Дали задание определить функцию shorter, с помощью функции length, которая принимает два списка и выводит меньший из них; если списки одинаковы по количеству аргументов, выводит первый. Собственно, пикрилейтед. Нихуя не понял, почему работает криво, ткните тупым ебалом, что там не так.
Да, в ответах посмотрел, там решение через if - мол если больше, то одно значение, во всех остальных другое. Так намного проще, базара ноль. Просто интересно, почему мое определение работает через жопу. Причем первые два вычислило не правильно, а третье правильно. Сейчас сообразил, что можно было в две строки написать, просто в одной из них сразу поставить меньше или равно.
Там вроде разные скобки-то используются тупо для наглядности, не более. И поймал себя на мысли, что он всегда именно Y возвращал. Может просто cond не может возвращать какое-то значение, а его роль возвращать #t/#f, поэтому такая хуйня вышла?
как можно быть настолько тупым?
ну это прям пиздец
у тебя скобок не хватает блять
у тебя условие езде >
=
<
а не (> (length x) (length y)) и т.д.
поэтому > ~ #t и выполняется всегда возврат y
ты на вряд ли настолько тупой, скорее всего тебе не хватает концентрации, внимания и всего такого
сходи что ли к врачу, может что пропишет
без обид, ничего личного
Да, дело правда было в скобках, спасибо.
>>285295
Я плюю на несколько дней, потом с головой ухожу, многое забываю за эти дни. Плюю, т.к. бывает упрусь в такую залупу, что все желание нахуй пропадает; другой вариант - просто некогда погромированием заниматься. Я в принципе задачи в последний раз решал месяца 1.5 назад, до того, как с модулями начал голову ебсти. Позабылось по ходу. Ну ничего, надеюсь без таблеток все-таки обойдется, лол. хочешь, чтобы меня опять положили? не-не, к докторам не пойду
Мне нужно сделать аналог функции bytes<?
Берем два байтстринга и проверяем в лексиграфическом они порядке или нет.
Хочется сделать это поптимально, по памяти и времени, чтобы быстро оче.
пришел к такому варианту - пик.
Но не уверен относительно того, как будет выделятся память в let выражении.
Не высрет ли оно это в кучу вместо стека?
Не вызовет ли лишнею манипуляцию со стеком?
А если я буду вначале a-val и b-val объявлять а потом делать set! не вызовет ли это каких-то странных побочных эффектов?
ВОЗВРАЩАЕМСЯ НА ХТДП, ЕБАНЫЙ В РОТ
Добро пожаловать, снова, лол. Поглядим, что на этот раз выйдет.
Два вопроса. Можно ли на вашем языке и удобно ли будет сделать две игры - одну типо цивилизации, а другую - визуальную новеллу?
А че так? Я просто из депрессии хочу выйти, врач посоветовал заняться программированием, чтобы мозги напрячь.
Я щас тебя затроллю. Мамкиным дилдаком в анус.
SICP это троллинг ньюфагов типа боку но пико в анимаче.
Возьми гейммейкер лучше (на нем целый андертейл сделан), и начни с визуальной новеллы. Цивилизацию ты не потянешь.
>из депрессии хочу выйти, врач посоветовал заняться программированием
Лол, это еще более крутой троллинг. Я как хуями в монитор ложил, когда не получалось, так ну его нахуй. ЧЕТЫРЕ ЕБАНЫЕ КНИГИ БРОСАЛ прежде чем нашел ту, которая более-менее пошла.
оп
SICP тоже неплохая книга
Racket (язык, который там по умолчанию) - это разновидность scheme. Ну типа как жаваскрип и es6. То есть тебе необязательно даже выбирать специальный язык для сикпа, там в любом случае отличия будут минимальные, типа какая-то функция по-другому названа или еще в таком стиле.
Не просто честно, а так и нужно делать. И еще давать им понятные дескриптивные имена. За функции, которые не вмещаются на один экран, следует сжигать заживо. А большинство функций должны быть 5-10 строчек в высоту.
>Не высрет ли оно это в кучу вместо стека?
>Не вызовет ли лишнею манипуляцию со стеком?
Анон, ты не на си пишешь. Я сходу не помню, но мне кажется, что стандарт не дает вообще никаких гарантий по поводу того, где размещаются объекты, и оставляет все это на усмотрение компилятора. Считай, что у тебя все boxed, короче. Если хочешь ебаться в байты, бери chicken scheme - оно генерит си-код, можешь потом сам открыть и посмотреть, куда оно аллоцирует, кек.
По факту, у тебя твои a\b-val будут просто поинтерами в кучу на стеке, инфа 99%.
Кстати, у тебя для двух пустых строк возвращает #f, хотя они в лексикографическом порядке, не?
>вначале a-val и b-val объявлять а потом делать set!
Говнокод же.
Нормас. Не забывай весь код, который ты там видишь, пробовать в репле, ну и упражнения все решать. Алсо, кидай свои решения на гитхаб\пастебин, типа отчеты о прогрессе ну и хуями тебе покладут заодно если код хуевый, кек
>>285741
Лучше поиграй в spacechem или factorio. Для визуальной новеллы нужно рисовать, программирование тут не при чем.
>>285794
>SICP это троллинг ньюфагов
Нет ты.
>Кстати, у тебя для двух пустых строк возвращает #f, хотя они в лексикографическом порядке, не?
Не, если строки равны должно возвращать фулсе.
В самой ракетке есть 3 операции bytes<? bytes<? bytes=?
Но для пустых таки все 3 должны фулсе вернуть. Если по логике, но ракетка таки для (bytes=? #"" #"") выдает #t
Это может логично если рассматривать строки как строки, элемент текста.
Но у нас же программные строки, да и не строки, и массивы байт, пустой массив байт как бы особый объект должен быть, сравнивать то мы хотим содержимое, а если содержимого нет, так и сравнивать нечего.
>Анон, ты не на си пишешь.
Да, но...
>Считай, что у тебя все boxed, короче.
Ну нафиг.
>По факту, у тебя твои a\b-val будут просто поинтерами в кучу на стеке, инфа 99%.
Поинтерами не хотелось бы, хотелось бы чтобы просто в калл стеке.
>Говнокод же.
Прости меня, мама, хорошего борщехлеба.
Не понимаю, как можно кодить практично, и чтобы не было лютого дерьмокода.
Как начнешь эксепшоны ловить - всё, код поехавшим становится.
>Не, если строки равны должно возвращать фулсе.
А, тьфу, не меньше-или-равно же, а просто меньше, ты прав.
>Поинтерами не хотелось бы,
В смысле? Твой байтстринг в любом случае будет в куче лежать, если только компилятор не заинлайнит все что ни попадя. Опять же, я не знаю деталей реализации ракетки, но даже если бы и знал, думать о таких вещах в высокоуровневом коде не совсем правильно. Если хочешь контролировать каждый байт, пиши на расте, тут это просто splitting hairs получается.
>Как начнешь эксепшоны ловить
М О Н А Д Ы
М
О
Н
А
Д
Ы
Слив засчитан.
image-width – принимает изображение (ширину, цвет и пр), а возвращает только ширину одним числом. если ввести несколько изображений, он складывает ширину всех и выводит общую одним числом. если внутри него overlay(несколько наложенных друг на друга), выводит бОльшую ширину, но не складывает, т.к. изображение-то одно
Просто это домыслы, что-ли, которые пришли в голову, глядя на примеры. Там именно текста с объяснением нет. Я все правильно описал?
оп
>если ввести несколько изображений, он складывает ширину всех и выводит общую одним числом.
Чо? (imagewidth i) возвращает ширину изображения i, в пикселях. Все.
Каким именно образом ты это изображение получишь - это вообще нерелейтед, ее это не ебет. Она просто возвращает ширину и все, как и написано на твоем пике.
>Просто это домыслы, что-ли, которые пришли в голову, глядя на примеры.
Ну так ты не просто гляди на примеры, а открой дррэкет да поэкспериментируй.
Понял, спасибо. Там про сложение я функцию beside че-то мимо глаз пропустил, а она-то в ширину изображения слепляет и получилось, мол сложение. Хорошо, понял все.
У меня же racket
Vi che ohooeli tut anime blyad postit'?
Как пользоваться этим?
В особенности 3-ий параметр не понятен
Ну у меня такое выдает. Так что она делает-то эта функция? Пробовал 34 с другими знаменателями, в большинстве выдает 34.
Числитель выводит, очевидно
34/443262 это 0.00007670407, что эквивалентно 17/221631
Нахуй тебе сикп, читай лучше школьный учебник по арифметике
Короче если можно сократить числитель и знаменатель, он их сокращает и выводит числитель. А если они не сокращаются, он просто выводит числитель. Так?
Дело не в арифметике, а в попытке понять логику, методом тыка не удалось, вот сюда и принес.
Насчет сикпа - я хтдп читаю, лол.
0.00007670407
Ну если поделить, Это понятно, сколько будет. Короче понял, выводит наименьший числитель, если меньше не сделать, выводит его. Спасибо.
Ну в любом случае ответ я получил, спасибо.
бамп
Какой здесь должен быть первый аргумент? Какой-то объект? А какой именно?
С такими знаниями нужно читать школьные учебники, а не сикп почитывать, это тебе не художественная литература, это курс.
если сначала пишу #f, то всё нормально, пока не нажму на кнопку для создания экзешника
Аноны, помогите понять смысл решения задачи про монетки.
Я не прошу объяснять мне код, он простой.
Мне скорее интересна логика почему
>the number of ways to change amount a using all but the first kind of coin,
плюс
> the number of ways to change amount a - d using all n kinds of coins, where d is the denomination of the first kind of coin
Заранее извините если с разметкой намудрил
Спасибо, хорошее объяснение.
Итеративные решения к некоторым заданиям довольно сложно подобрать. Даже с 1.11 где все довольно просто и то пришлось рисовать на листке прежде чем понял. А для того же count-change пока не получается, так что оставлю его на потом, через какое то время вернусь и появятся идеи.
>SICP Anime Opening
wwwwwww
Скачал сикп и не осилил первую главу. Почитал тред и увидел, как все пишут, мол, это книга для студентов. Улетел на жопной тяге на орбиту. Вы меня затроллили, молодцы.
А хуле ты хотел, я свои конспекты по диф.геому тоже еле осиливаю, хотя когда-то по ним сдавал экзамен.
Да, по объему если посчитать, то это я за 2 недели столько изучил. Если провести какую-то параллель, грубо говоря к апрелю я должен книгу добить. Есть мысли, что дальше сложнее и медленнее, но корректировку на этот случай я сделал. Короче поглядим.
ОП, так как ты обе книги читал и решал, скажи в чем принципиальная разница между ними? То что одна "легкая" а вторая "сложная" это я знаю, но чем-то еще они отличаются?
Пока решаю 3 главу сиспа, впечатление довольно двоякое. Не сказал бы что сложно, но заебывает.
Я сикп начал читать и решать, в результате бросил, т.к. не пошло. Потом хтдп начал решать, тоже не пошло и бросил. Дальше было пару книг, которые более-менее пошли, теперь на хтдп вернулся и все-таки пошло, блядь. Мне сложно судить, т.к. я их не прорешал же. Ну и да, для себя вывел, что одна сложнее другой, причем намного сложнее. А больше мне сказать нечего, извиняй.
А если не секрет, куда ты стремишься (пройти собеседование, прорешать всю книгу)? Или просто решаешь для того чтобы решать?
Я хочу стать программистом. Отзывы в интернете говорят о том, что язык-схема хорош для начинающего. Плюс хтдп охуенная книжка, чтобы понять логику программирования. Она же на том же языке и написана. Плюс сикп одна из лучших книг, которая делает код охуенно чистым и пр., опять же сикп на том же языке программирования. А на любой другой язык можно переучиться за 3 месяца. Вот и думаю по такому пути пройти - изучить эти две книги, потом изучить вакансии, выбрать язык, выучить его и идти на работку. Хотя есть мысли, что сикп может не потяну или будет много сложных задач, на которые просто время будет жалко тратить. Даже сейчас в хтдп сталкивался с задачами, которые я прекрасно понимаю, как сделать, но просто время тратить не хотел, путь даже это были бы сраные 5 минут. Хотя таких задач было мало, и 90% я все-таки прорешивал.
>схема хорош для начинающего
С самого начала задаюсь вопросом, зачем автор выбрал схему? Почему не хаскель, на котором даже сайты можно писать, а также графические интерфейсы и многое другое?
Хуй его знает, нам-то, простым смертным, остается только гадать. Ну еще так можно сказать, автор-то явно свое дело знает куда лучше, чем мы с тобой. Ему виднее, наверное.
>даже сайты можно писать, а также графические интерфейсы и многое другое?
Racket и GNU Guile. Это умеют.
Делай, что нравится. Потом можешь вернуться и продолжить.
Есть ли смысл читать SICP если мне не нужен Lisp?
Нуу триплу стоит довериться)
>Эта книга посвящается, с уважением и любовью, духу, который
живет внутри компьютера.
Лайк
>>271806 (OP)
На самом деле сисп переоценен. Хз зачем его тут форсят, но если хотите подтянуть уровень читайте Кормена.
Он объясняет всё на псевдокоде, который очень легко перенести на питон, жаву, жаваскрипт и почти любой другой яп.
Сисп не плохая книга, но он устарел лет так на 30.
В 2к18 есть гораздо лучше, современнее и актуальнее.
Хотя борщехлебам без разницы что учить, хоть сисп на схеме 70 годов прошлого века, хоть хаскель где даже с опытом фп хуй найдешь работу.
Кормен - это книга про алгоритмы, а Сикп – про некоторые идеи, которые стоят за компьютерными программами вообще. Как одно может заменить другое?
Если есть задача освоить популярный ЯП, нужно брать книжку по этому ЯП.
>устарел лет так на 30.
>сисп на схеме 70 годов прошлого века
Кто тебе мешает использовать Racket или Guile?
Двачую этого, нахуй луа вообще нужна?
Скриптики всякие на змее заходят, по скоростям луа тоже сосать не даёт, плюс какие-то ебанутые загоны типа индексации массивов с единицы.
И майнтест, лол
Мудачье, типа тебя, которое в глаза долбится :З
Lua хорошо в связке с C работает. Встраиваемый язык, можно программировать различные игры и nodemcu. Есть библиотеки для создания игр.
Скажите дауну, как в лиспе выводить текст?
1) "Text"
2) (require 2htdp/image)
(text "Text" 18 "black")
3) (require 2htdp/image)
(text/font ... (подробнее ищи на официальном сайте языка))
4) и т.д.
---
(define (f x)
(list (+ x 5) (+ x 10)))
То есть либо через список, либо через структуру
(define-struct a (b c))
(define (f x)
(make-a (+ x 5) (+ x 10)))
Ну и по идее различные более изощрённые варианты, к примеру, запихать их в строку и вывести как текст, смотря что тебе нужно
Возвращать у тебя функция всегда 1 параметр будет
ещё добавлю, что у списков много различных видов записи, ну можно ещё через пару вывести, это такой "недо"-список
Как делаете вы?
Я обычно пропускаю, если сильно долго не могу сообразить и иду дальше. Потом просто время от времени возвращаюсь. Ответы на нерешенные задачи смотрел очень редко, что-то из первой главы, где нужна была математика, не помню уже точно.
Спасибо, анон.
>Сисп не плохая книга, но он устарел лет так на 30.
Это книга про программирование вообще. Такое никогда не устаревает. Два чудика, начитавшись СИКПа, изобрели язык R.
Топавая хайповая фраза
в этом итт треде, конечно же
С введением присваивания лисп мигом утратил свое очарование и стало видно, насколько он не пригоден для программирования в императивном стиле. Хотя я пока не проникся или чего-то не понял.
На Лиспе тоже элементарно, просто нудно. Если тебе это сложно, то ты еще чего-то не понимаешь.
Но это все баловство. Настоящий дек на массивe делается.
Деструктивными операциями это делается.
https://pastebin.com/cwAz6j3L
на хаскеле ебани
обьясните мне пожалуйста, мне прямо с самого начала надо жестко вчитываться в книгу или можно спокойно глазами проводить?
на толчке полистать норм книга)
https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf
>новая версия на питоне
Нет, на питоне сделали новый курс на замену, и он совсем другой - заточен под современные айти реалии.
>Хьюго Дум хочет построить квадратор
Не знаю почему, но эта фраза вызвала у меня неконтролируемый хохот и я смеялся несколько минут.
Да, живой, только нихуя не делаю. Точнее другим все занят, но думаю на следующей неделе домучаю все свои дела и вернусь к изучению htdp. Короче перерыв себе сделал месяц+неделя.
>>311995
Ну мне не подошла, во втором посте лично от себя совет давал, с чего начать.
>>312041
Я тоже инглиша не знаю, сижу с переводчиком. Бытует мнение, что для вката инглиш не сильно и нужен, а если вкатишься, параллельно выучишь.
оп
Да, книгу, которую я советовал, там только первые 2 абзаца. Ну а так можно htdp попробовать, может сразу пойдет, но у меня не пошла.
>Для начала мы конструируем кадр, в котором amount, формальный параметр W1, связывается со значением 50
Зачем? Мы ведь уже сконструировали окружение (при вызове функции), в котором amount связан с 50. Зачем нужна сущность "кадр", если есть сущность "окружение"?
Можно от противного: покажите мне пример, где в окружении присутствует несколько кадров и в этом есть необходимость.
https://ideone.com/oKdSCx
Пример простой и надуманный, но, я надеюсь, ты уловишь суть, подумав, чем отличается x как аргумент func от того x, который внутри let, и от того x, который должен быть после let (оставляю тебе последнее в качестве самостоятельного упражнения).
Но ведь при вызове let будет создано новое окружение, в котором x связан со значением "аргумента" let (вообще, насколько я помню, let - это синтаксический сахар для вызовы lambda). Код let связан со своим окружением, код func - со своим. Когда код let закончит выполнение, мы вернемся в код func и будем пользоваться значением x из его окружения. Кадр в каждом из окружении по-прежнему один. Или я не прав?
Все возможно, пробуй.
Можно рассматривать make... как создание новой процедуры с ее собственным окружением, а можно как создание нового окружения с ссылкой на процедуру, и вот это второе называется кадром.
Тут скорее вопрос конкретной реализации, видимо, их лисп был так устроен.
>А на любой другой язык можно переучиться за 3 месяца.
После СИКПа за неделю можно освоить любой язык.
>С самого начала задаюсь вопросом, зачем автор выбрал схему? Почему не хаскель, на котором даже сайты можно писать, а также графические интерфейсы и многое другое?
На Racket можно писать тоже самое.
>На самом деле сисп переоценен. Хз зачем его тут форсят, но если хотите подтянуть уровень читайте Кормена.
>Он объясняет всё на псевдокоде, который очень легко перенести на питон, жаву, жаваскрипт и почти любой другой яп.
СИКП - построение абстракций, архитектура, и немного алгоритмы. Кормен - только алгоритмы. Алгоритмы без абстракций - это дырка от бублика.
>>297679
>Сисп не плохая книга, но он устарел лет так на 30.
Рассмешил. До сих пор никто не создал лучшего языка и руководства.
>>297679
>В 2к18 есть гораздо лучше, современнее и актуальнее.
А тут по подробнее. Покажи ка нам что есть лучше.
>SICP - это же, получается, просто учебник по scheme?
Нет, это учебник по построению программ.
>Я не понимаю, зачем нужны кадры в модели вычислений с окружениями. Ведь значения переменных и так содержаться в окружениях.
Почитай про стек и стековый кадр
https://ru.wikipedia.org/wiki/Стековый_кадр
https://habr.com/company/smart_soft/blog/234239/
>ОП рапортует. Доделал все свои дела, с завтрашнего дня с отдохнувшей головой продолжу обучение.
Завтра скажешь себе, что завтра начнешь. И так до бесконечности. Рекурсия.
>есть возможность переложить материал из SICP на BASH и кресты?
Лисп (Scheme, Racket) - может выступать как псевдокод. По сути он и есть псевдокод. Поэтому его код легко переводить в любой другой. Только проблема в том, что в баше нет функций высшего порядка (а может и есть, я не в курсе).
Ничего не скажу на этот счет, я не спец. Единственное, что команды-то выучить удастся-ли за такой короткий срок. Но поглядим, время покажет. Хотя начал склоняться к тому, чтобы htdp изучить, а sicp может и нахуй послать. Или в свободное время потихоньку прорешивать. Все-таки жизнь идет и саморазвиванство тоже должно иметь какие-то пределы и не в ущерб зарабатыванию денег.
>>314965
Да почему, я 3 недели тогда ебашил без выходных и праздников, за это время мозг закипел и дел накопилось. Сейчас все разгреб и мозги отдохнули. Если бы ты читал предыдущие треды, ты бы понял, что я упертый мудак и сдаваться это не про меня.
В СИКП сложно только задачи решать. Темы первых 2 глав не сложные. Работа с функциями. Без этого сам не научишься из функций строить абстракции. А без этого не научишься строить модульные программы. Так какое тогда может быть зарабатывание денег.
Не читал, не знаю. Скорее всего нет. Тем более СИКП есть на русском. Можно лучше понять идеи, которые авторы туда вложили. Идеи эти на самом деле простые, но мощные. Например интерпретатор в 100-200 строк в 4 главе.
HTDP как мне кажется уже не то. Все современные идеи глуповатые, чрезмерно переусложненные. Код ради кода. Сейчас такое время, инженеры уже не те, они думают, что чем сложнее тем круче. Но все ведь наоборот. Самые крутые решения это простые. Простое легко изменять, оно надежное, мощное, не подверженное крушению. В СИКП простые и мощные решения.
Это видно по современным языкам программирования. Java, C#, C++, Rust, Python, - все они чрезмерное неоправдано переусложнены. То есть их навороты не решают задач, а только приносят лишнюю сложность. Получается что инженеры не решают проблемы, а создают. Где это видано чтобы было так. Инженеры должны бороться со сложностью, с проблемами, а они наоборот их создают.
Поэтому Лисп всегда будет мощнейшим из языков. Ни один язык не достиг такой мощи при такой простоте. СИКП придерживается той же философии что и создатели Лиспа. Что-то подобное сейчас найти почти невозможно.
сикп начал, много нравится из того, что там дают, но
матана слишком много, поэтому пока остановился, мб забью, мб продолжу, от такого кол-ва математики воротит
можно же рекурсии различных типов объяснить без матана, как в хтдп том же
У меня тоже не было проблем с математикой, но сикп с первого раза тоже на зашел. Его вообще нужно перечитывать регулярно. Как писал Пол Грэм, что перечитывает сикп уже 15 лет, и до сих пор находит новые знания.
Я знаю, что такое стек и стековый кадр. Ты хочешь сказать, что под кадром они имели в виду просто кадр стека? Почему, блин, тогда нельзя было так и написать?
Может мои знания из других ООП языков мне мешают понять?
Абстракция - это сокрытие деталей реализации: Петян может использовать программный модуль Васяна, не зная как он устроен, только зная АПИ. А Васян может как угодно перепелить реализацию своего модуля в любой момент, скажем, на более быструю, и на коде Петяна это никак не отразится, если, конечно, Васян не долбоёб и не закомитит баг.
Потому, что это не стековый кадр. Хотя и очень похоже.
У них кадр - это кусочек окружения. Нода в дереве кадров. Все кадры собираются в дерево, и кадр+все вышестоящие по дереву кадры - это окружение.
>means of abstraction, by which compound elements can be named and manipulated as units
В самом первом пункте первой главы написано. Проще говоря, тебе не придется каждый раз писать код для совершения какого-либо действия. Например, извлечения квадратного корня.
Смотря в каком контексте применяется. В общем случае абстракция это способность представлять сущности в формальном виде. Программирование как и математика это система абстракций. Сущности, процессы, модели, - представляются в них в формальном виде, в котором можно рассуждать о них. Бывают уровни абстракции. О каждом предмете или явлении можно рассуждать на разных уровнях абстракции.
>инкапсуляция
Нет, инкапсуляция - это простое объединение данных и кода в единый компонент. Что, вобщем-то не обязательно обеспечивает сокрытие деталей реализации.
>Что SICP подразумевает под словом "абстракция"?
Абстрагирование - https://www.youtube.com/watch?v=ZguVPNvmfzY
Проблема в приципе в том, что образца готовой программы по тексту не было. Объясняли только, что может этот ебаный big-bang в себе содержать, а как в общем сдружить его с программой - нихуя нет. Ну или я правда тупой и чего-то не понимаю.
Пытался эти 2 течпака отключить, перестает читать функции big-bang и прочие, хотя в предустановленных, в среднем экране настроек они висят. Да и хуй с ним, работает, да и ладно.
Еще раз спасибо, что бы я без вас делал. Хотя оглядываясь назад, вспоминаю, как хуесосили, что я троллю, мол тупым таким нельзя быть, когда простых вещей не понимал. А тут уже хотя бы что-то соображаю, значит труды, в т.ч. и ваши, не пропадают и приносят пользу.
>>317083
ОП, все превозмогаешь? На какой главе htdp сейчас?
И, кстати, где там анон, который за месяц хотел sicp осилить? Помню, он распечатывал себе книжку даже
Здоров. Да, все превозмогаю. Я не ОП самого первого треда, я ОП второго и последующих. Сейчас примерно в середине 1 главы, все идет хорошо. Правда предыдущие 1.5 месяца ничего не делал, т.к. мозги закипели, когда 3 недели каждый день изучал. Вот несколько дней назад опять приступил к обучению.
Насчет того, кто хотел за месяц осилить, что-то не видно его.
>(define integers (cons-stream 1 (add-streams ones integers)))
Это пиздец, уже час не могу понять, почему это работает. Дебаггер что ли искать...
check-expect – тестировщик написанной программы, в конце пишем (check-expect (имя написанной программы 32) 0) после имени переменную ввода, вторая переменная, это сколько должно получиться (уже готовые значения писать) и он выдаст, правильно ли программа сработала
Ну у меня есть в конспекте вот такая хуйня, не знаю, поможет ли в твоем случае.
оп
Вот сидел реально не один час, прежде чем сюда это тащить.
https://pastebin.com/9dhT58qB на всякий сюда скинул
Сука, методом тыка. Ладно, потом буду разбираться, почему именно так. Отбой тревоги, короче говоря. Ну и да, дорогу осилит идущий, лол.
Да я сам из-за завала на работе остановился на 3 главе SICP.
Вот, думаю, с нового года засесть за него снова. Мне лиспы нравятся. Хоть какое-то отвлечение от js-рутины.
Только запамятовал, у тебя какие цели-то? Вот пройдешь ты HTDP, дальше что? Стремишься куда? На работу устроиться или так, просто для себя?
Хочу на работу устроиться, вроде логика программирования одна на всех языках и судя по отзывам htdp и sicp лучше всего ей обучат. Первоначальный план был прорешать thdp, потом sicp, а уже потом месяца за 3 переучиться на любой другой язык и пойти трудоустраиваться. Сейчас правда мысли htdp прорешать и возможно начать учить язык для трудоустройства, т.к. прорешивание sicp может еще оттянуть на полгода-год устройство на работу, что не есть хорошо. Кстати на твой js наверно обучаться буду, вроде по вакансиям проще всего найти работу.
Да, php или js чаще всего встречаются.
Только учитывай, что js часто - это frontend, а там некоторые хотят, чтобы не только логику на фреймворке (react/vue/angular) писал, но еще и верстал им. Бывает, конечно, что в штате держат отдельно версталу.
Чисто backend (node.js) вакансии чуть реже, но тоже есть.
SICP отодвинет не на год, а больше.
Хоть основы программирования HTDP и даст, но с экосистемой (либы всякие, бандлеры, фреймворк и т.д.) придется попердолиться знатно. Вряд ли 3 месяца хватит (ну если только совсем как трейни идти). Так что расчитывай где-то на пол-года минимум.
Ну хорошо, буду иметь в виду, спасибо за советы. Терпение и труд, как говорится. Вчера вон всю ночь просидел, хуями в монитор ложил, но ебаный светофор все-таки сделал. Сейчас разобрался, что куда идет и почему именно так должно быть. Как говорил великий филосов Кама Пуля - не главное, с какой скоростью ты двигаешья, главное не останавливаться :З
Хвостовая рекурсия это скорее goto, а не цикл. Можно и цикл запилить, можно и не цикл. По читаемости примерно эквивалент goto.
Поэтому собственно в ФП эту рекурсию прячут под плинтус, выставляя на фасад комбинаторы.
это всё понятно, но ведь цикл сам себя не вызывает всё равно, то есть именно с этой точки зрения цикл запилить всё равно не получится через хвостовую рекурсию?
или если как в типичном фп, оптимизация хвостовой рекурсии, то вызовы в стеке не остаются и в принципе тоже самое получится?
>вызовы в стеке не остаются и в принципе тоже самое получится
Именно, получится goto в начало функции. А на базе goto уже легко делается цикл while, из него можно сделать и for.
Всё, допёр, отставить
>Почитал тредик про рекурсию, получается в СИКПе пиздят, когда говорят, что хвостовая рекурсия = цикл?
Где там такое написано?
>Ну допустим оптимизация хвостовой рекурсии имеется, но цикл сам себя не вызывает таки, всё равно разные вещи
Это уже особенности реализации транслятора. Рекурсивная функция все равно рекурсивная, даже если транслируется в цикл. В машинных кодах вообще функций и циклов нет. Но это же не значит, что в высокоуровневом коде нет функций и циклов.
>>318270
Цитата немного выше:
"Как следствие, эти языки способны описывать процессы только с помощью специальных циклических конструкций вроде do, repeat, until, for и while."
Теперь понятно, циклические конструкции это конструкции языка. Хвостовая рекурсия это способ написания рекурсивной функции, которая порождает итеративный процесс. Оптимизация хвостовой рекурсии, это когда хвостовой вызов транслируется в нечто не потребляющее стек.
>>318270
Изучи что такое стек. Как функции помещаются в стек, как стек освобождается.
Статья на тему "Cравнение цикла и рекурсии с точки зрения производительности приложений" https://www.ibm.com/developerworks/ru/library/wes-1307_col_paskin/index.html
Кинул ссылку перед прочтением, потом прочитал и увидел некоторые несостыковки в ней. Например написано, что хвостовая рекурсия никогда не потребляет стек, но это не так, если нет оптимизации в языке, то потребляет. И еще некоторые неточности. Но в целом можно прочитать. Есть конечно более фундаментальные статьи на эту тему. А еще лучше почитать книги.
Да я со всем этим знаком давно, только про уточнение с оптимизацией хвостовой рекурсии услышал впервые, я думал, что везде вызовы в стек не помещаются, а оказывается только если оптимизация имеется. Мне просто хочется получше понять, как устроен цикл на более низком уровне. С рекурсией и её видами мне всё понятно, и как работает, и все фишки со стеком, и что это такое. С циклами я тоже умею работать, но не совсем понимаю, как это устроено изнутри. Ну в хвостовой рекурсии увеличили аргумент, к примеру, затем вызвали ту же функцию с этим изменённым аргументом, и так пока какое-то условие всё не остановит. А как в цикле все эти итерации проходят, если не процесс сам себя не вызывает?
Один в один, как при хвостовой рекурсии с её оптимизацией, или как-то по-другому?
>А как в цикле все эти итерации проходят, если не процесс сам себя не вызывает?
Чтобы это понять нужно самому написать интерпретатор. И процессы бывают разные, есть процессы операционной системы, есть процессы реализующиеся языками, а в СИКПе говорится о процессе вычисления. То есть не о живом процессе в программе, а об абстрактном.
Скорее не программный процесс, а вычислительный. Алгоритмический еще можно назвать. Линейный, нелинейный и т.п.
Потому что cons-stream - это особая форма, а не функция, и свой аргумент она не вычисляет, сразу по крайней мере, а вычисляет только в тот момент, когда нужен очередной элемент последовательности. Лисповские стримы - это то, что сейчас принято называть "ленивыми списками", гугли.
>В машинных кодах вообще функций и циклов нет
Здравствуй, приехали, а инструкции call, ret и префикс инструкций rep тебе говрит о чём-нибудь?
И что это за инструкции? Вообще то, машинный код состоит из двоичного кода, и в нем нет никаких инструкций.
call вызывает функцию - кладёт на стек адрес возврата, а в регистр rip - адрес функции. ret возвращается из функции, делает то же, что и call, но в обратной последовательности. rep - префикс для повторения следующей инструкции до тех пор, пока значение в rcx не станет равным нулю, такой себе рудиментарный for.
> Вообще то, машинный код состоит из двоичного кода, и в нем нет никаких инструкций.
Машинный код состоит из ассемблерных инструкций, хватит троллить тупостью. В png-файле из оп-поста тоже двоичный код, но попробуй-ка ты его выполни, как исполнимый.
Не функцию, а процедуру. Это не такие же функции как в высокоуровневых языках. Нельзя переписать функцию из высокоуровнего языка в одну функцию на ассемблере.
До ассемблера тоже были компьютеры, и естественно был машинный код.
И вообще, процедуры появились в ассемблерах не так давно, если не ошибаюсь.
Есть ли где-то полноценная версия на питоне или на чём нибудь поновее, чем лисп? А то даже смотря на код, чувствую, что перед глазами laba2.
А сикп это разве не дико навороченная лаба2, по крайней мере первые главы которые и советуют прочитать
Спасибо.
Ну, это он конечно же загнул. Сейчас это никому не нужно. Сейчас бизнес заинтересован в том, чтобы программист смог накидать рест контроллер на спринг буте (Аннтоация @Controller) и набросать сервис (аннотация @Service), которая расширяет единственный интерфейс MyServiceImpl extends Service, в котором будет реализован доступ к базе данных через дао (аннотация @Repository). Сам хайбернейт даже не нужно знать, а только уметь пользоваться Spring Data. Т.е. по-сути ты пишешь всякие findByName, а умный спринг фрамеворк за тебя гененирует высокооптимизированный запрос в базу.
Найс явамакака порвалась.
Сикп не для тех, кто из говна, фреймворков и палок собирает БИЗНИСУНУЖНОБИСТРО. Сикп для тех, кто проектирует и пишет те же самые базы, например. По забавному совпадению прямо сейчас пишу на Scheme индексы для рудиментарной базы данных в пет-проекте - производительность почти как у C, кода на порядок меньше, а читабельность кода на порядок выше.
640x360, 4:21
Добра вам и няшек, всего самого в наступающем году.
Вот вам песенка про новогоднюю ночь :З
ваш оп надеюсь после переката галка ОР все-таки начнет работать
>>319048
Не надо толстить, и без того тошно. Скорее бы этот мерзкий день прошел...
https://www.youtube.com/watch?v=8-YtQZR2wUE
Ну двощи ты читаешь каждый день, что мешает полистать книгу.
Я вот повёлся на форчанский форс книги, понял что вроде общие идеи понимаю и интересно весьма, но математика уровня школьника и недостаточная сообразительность мешают выполнять упражнения, поэтому попробую вкуривать английские лекции. Всё равно больше нечем заняться.
Когда я понимаю, что для результата нужно приложить очень много усилий то руки сразу опускаются
Ты не один такой.
Честно говоря, не знаю что за люди традиционно обитают /pr/, но я на своём этапе деградации уже не надеюсь сделать это своей профессией и воспринимаю как хобби.
А я слюни пускать, именно поэтому необходимо занятие, стимулирующее умственную деятельность.
Не ебу о чем ваш тред, но я перекатился в питонотред, мне там вполне уютно, даже чувствую прогресс всем двачем пытаемся сделать брут цифрового кода
https://2ch.hk/pr/res/1320096.html (М)
https://2ch.hk/pr/res/1320096.html (М)
ПЕРЕКАТ
заебись, там галка ОР начала работать:З
О чем эта книга, кратко.
Это та самая книга, о которой написано в лурке было? Я читал ее миллион лет назад, хуле толку-ниче не запомнилось.
Это копия, сохраненная 28 января 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.