- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
(define A (list 1 2 3 4 5))
(define (reverse L)
(let ((C (cdr L)))
(if (not (null? C))
(cons (reverse C) (car L))
(car L))))
(newline)
(display (reverse A))
(newline)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−1
(define A (list 1 2 3 4 5))
(define (reverse L)
(let ((C (cdr L)))
(if (not (null? C))
(cons (reverse C) (car L))
(car L))))
(newline)
(display (reverse A))
(newline)
Почему у меня получается х****й лист после реверсинга? :-(
JloJle4Ka 10.02.2023 15:03 # 0
А он вот такой: ((((5 . 4) . 3) . 2) . 1)
HoBorogHuu_nemyx 10.02.2023 17:01 # 0
(5 4 3 2 1) — это (5 . (4 . (3 . (2 . 1))))
HoBorogHuu_nemyx 10.02.2023 17:05 # 0
Было (5 . (4 . (3 . 2)))
Нужно впихнуть единицу в конец. Значит, двойку нужно поменять на (2 . 1)
Эту задачу и решает append. Она оказалась сложнее, чем добавление в начало, ибо в начало можно добавить с помощью одного cons.
HoBorogHuu_nemyx 10.02.2023 17:12 # 0
JloJle4Ka 10.02.2023 18:32 # 0
HoBorogHuu_nemyx 10.02.2023 21:16 # 0
Можнл сделать и в конец O(1), если где-то отдельно хранить указатель на конец, но тогда его придётся обновлять при каждой вставке/удалении. Я пока не придумал, как это описать декларативно.
HoBorogHuu_nemyx 10.02.2023 17:19 # 0
Я наврал. На самом деле (5 . (4 . (3 . (2 . (1 . nil)))))
Тогда для добавления в конец нужно менять nil на (cons новый-элемент nil)
HoBorogHuu_nemyx 10.02.2023 17:38 # 0
HoBorogHuu_nemyx 10.02.2023 17:53 # +1
(last (5 4 3 2)) вернёт (2) — то, что нужно.
А setcdr от этого списка (2) заменит nil на вставленный элемент.
Т. е. append реализовано как (setcdr (last список) (новый-элемент))
guest6 10.02.2023 19:31 # 0
Черты характера Курта Кобейна?
guest6 10.02.2023 19:32 # 0
guest6 10.02.2023 19:39 # 0
guest6 10.02.2023 19:43 # +1
Fike 10.02.2023 19:44 # 0
guest6 10.02.2023 19:51 # 0
guest6 10.02.2023 19:58 # 0
guest6 10.02.2023 20:10 # 0
Fike 10.02.2023 21:22 # 0
CMEPTb 10.02.2023 21:58 # 0
JloJle4Ka 10.02.2023 15:06 # 0
Я уже всё решил... Угадайте-ка как!
HoBorogHuu_nemyx 10.02.2023 16:29 # 0
JloJle4Ka 10.02.2023 16:43 # 0
HoBorogHuu_nemyx 10.02.2023 16:53 # +1
HoBorogHuu_nemyx 10.02.2023 17:58 # +1
Есть два стула:
1. Отделяем первый элемент через car и добавляем в конец (через append). Добавление в конец — затратная операция, ибо каждый раз нужно сканировать весь список в поиске конца.
2. Отделяем последний элемент через last и добавляем в начало (через cons). Поиск последнего элемента — затратная операция.
В обоих случаях получается маляр Шлёма.
В обычных императивных ЯП я бы постоянно держал в памяти указатель на конец списка, чтобы его каждый раз не искать.
Fike 10.02.2023 18:56 # 0
guest6 10.02.2023 18:59 # 0
да п***л на хуй, импертивный п***х
Fike 10.02.2023 19:37 # 0
HoBorogHuu_nemyx 10.02.2023 21:14 # 0
guest6 10.02.2023 20:03 # 0
Fike 10.02.2023 20:04 # 0
я не могу отказаться от веселья, у меня его и так нет
guest6 10.02.2023 20:09 # 0
guest6 10.02.2023 20:17 # +3
А тут не повезло. Брат увидел нас. Жена шла с любовником, они обнимались, целовались, а я шел сзади с сумками и пакетами. Брат ещё и на телефон это заснял. Родители вызвали меня "на разговор", потребовали объяснений. У меня не получилось ничего придумать, признался. Отец кричал, что я лох и терпила, позор семьи, мама и брат поддакивали. Сказали, чтобы наследство не ждал, все брату уйдет. И работаю я на фирме приятеля отца, лучше мне самому заявление написать.
Жена, когда узнала про разговор, тоже орала, что я тупой, раз никакой отмазки не придумал. Теперь она с любовником подумают, как меня наказать, чтобы я на всю жизнь запомнил.
ПМП.
guest6 10.02.2023 20:30 # +3
что я глуп.
Я сидел в это время под кроватью и меня не было видно.
О! что я испытывал в этот момент!
Я хотел выскочить и крикнуть: «Нет, я не глуп!»
Воображаю, что бы тут было!
Я опять сидел под кроватью и не был виден.
Но зато мне-то было видно, что этот самый Михюся проделал с моей женой.
Сегодня моя жена опять принимала этого Михюсю.
Я начинаю думать, что я, в глазах жены, перехожу на задний план.
Михюся даже лазал в ящиках моего письменного стола.
Я сам сидел под кроватью и не был виден.
Я сидел опять под кроватью и не был виден.
Жена и Михюся говорили обо мне в самых неприятных выражениях.
Я не вытерпел и крикнул им, что они всё врут.
guest6 10.02.2023 21:23 # +1
Я думаю, что она шлюха и сама дала на вписке по пьяне.
Fike 10.02.2023 21:26 # 0
guest6 10.02.2023 21:28 # +1
другие на говнокоде сидят
у нас разделение труда
guest6 10.02.2023 21:28 # +4
Просто не нужно путать преступление "изнасилование" (достаточно серьезное преступление) с историями типа: "я приехала к нему с ночевкой, думая что мы просто друзья, а он стал меня за коленку трогать". Второе конечно тоже не очень, но на изнасилование не тянет
hormand 11.02.2023 01:20 # 0
guest6 11.02.2023 01:14 # 0
https://i.postimg.cc/nh5JWBLF/image.png
боже мой, как же заебало
o6AMa_4MO 11.02.2023 12:00 # 0
Fike 10.02.2023 21:25 # +2
ScriptJobs 10.02.2023 21:14 # +1