- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
(defun question-2 ()
(let ((b '(1 2 3))
(a '(1 2 3 4))
(com (make-hash-table :test #'equal)))
(labels ((put-sorted (x)
(let ((key
(sort
(flatten
(copy-tree x)) #'<)))
(if (gethash key com)
(incf (gethash key com))
(setf (gethash key com) 1)))))
(values (remove-if
#'(lambda (x)
(prog ((results
(do ((x x (cdr x)) (r))
(nil)
(setf r (append (cadar x) r))
(when (null (cdr x))
(return r)))))
(dolist (y a)
(when (not (member y results))
(go remove-it)))
(put-sorted results)
(go keep-it)
remove-it (return t)
keep-it nil))
(all-functions b (cartesian-product a))) com))))
Ну, чем бы еще порадовать. Вот, родилось во время проверки домашних заданий :)
guest 29.05.2012 17:58 # −5
roman-kashitsyn 29.05.2012 17:59 # 0
> #'
> setf
> dolist
CommonLisp же
3.14159265 29.05.2012 19:56 # +1
Много скобок.
roman-kashitsyn 29.05.2012 20:53 # 0
Скобок во всех лиспах хватает ололо в clojure скобок меньше чем в жабе
wvxvw 29.05.2012 21:45 # +1
3.14159265 30.05.2012 15:29 # 0
wvxvw 29.05.2012 18:12 # 0
Тут, вобщем, как в комиксе с динозавром и goto получилось. Было очень влом переделывать по-нормальному. При чем 2 раза (но второй нужно объяснять, и мне лень) там можно было бы без do цикла сделать быстрее через (mapcan #'cdr ...) но я не сразу сообразил в чем фишка, и лень было разбираться.
bormand 29.05.2012 18:26 # +3
2) Зачем загонять все задание в одну функцию. ИМХО это только создает лишние labels'ы let'ы, уровни вложенности и проблемы при чтении.
TheHamstertamer 29.05.2012 19:54 # 0
bormand 29.05.2012 18:32 # 0
wvxvw 29.05.2012 19:07 # +1
Остальные функции: да, пожалуйста:
Вроде ничего не забыл.