Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lisp
Войти
Регистрация
Восстановить пароль
 
panins899
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 7
1

Застрял

04.10.2016, 00:57. Просмотров 243. Ответов 5
Метки нет (Все метки)

Ребят, прочёл 2 главу у Пола Грэма ANSI Common Lisp. Тупо по своей, возможно, невнимательности застрял на упражнениях(после 2 главы) с 7 по 9. Не лезут в голову решения. Не могу применить знания из 2 главы к таким задачам, что делать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2016, 00:57
Ответы с готовыми решениями:

застрял в emacs
(if (listp '(a b c) (+ 1 2) (+ 3 7))) жму enter а таб не успеваю нажать из-за...

застрял на элементарном
Всем привет! Объясните пожалуйста как для 5 летнего. Вопрос по книге lisp стр...

Застрял на this
Смотрю https://tutsplus.com/course/30-days-to-learn-jquery/ и на уроке Slides...

застрял...
Хочу поставить lmule но получаю ошибку... configure: error: Please...

Застрял
Не могу понять в чём проблема...в моей функции modul переменная Х считается...

5
_sg
3858 / 3640 / 253
Регистрация: 12.05.2012
Сообщений: 2,532
04.10.2016, 08:40 2
Lisp
1
2
3
4
5
6
7
8
9
10
(defun list-inside (w)
  (if (null w) nil
      (if (atom (car w))
      (list-inside (cdr w))
      t)))
 
> (list-inside '(a b))
NIL
> (list-inside '(a (b)))
T
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
8
9
10
(defun list-inside (w)
  (if (null w) nil
      (if (listp (car w))
      t
      (list-inside (cdr w)))))
 
> (list-inside '(a b))
NIL
> (list-inside '(a (b)))
T
Добавлено через 10 минут
Lisp
1
2
3
4
5
6
7
8
9
(defun list-inside (w)
  (cond ((null w) nil)
    ((atom (car w)) (list-inside (cdr w)))
    (t)))
 
> (list-inside '(a b))
NIL
> (list-inside '(a (b)))
T
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
(defun list-inside (w)
  (when w (if (atom (car w)) (list-inside (cdr w)) t)))
 
> (list-inside '(a b))
NIL
> (list-inside '(a (b)))
T
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
(defun list-inside (w)
  (loop for a in w thereis (listp a)))
 
> (list-inside '(a b))
NIL
> (list-inside '(a (b)))
T
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
(defun list-inside (w) (some #'listp w))
 
> (list-inside '(a b))
NIL
> (list-inside '(a (b)))
T
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
(defun list-inside (w) (find-if #'listp w))
 
> (list-inside '(a b))
NIL
> (list-inside '(a (b)))
(B)
2
Catstail
Модератор
23763 / 11843 / 2070
Регистрация: 12.02.2012
Сообщений: 19,244
04.10.2016, 11:18 3
Упражнение 8:
a) Печать заданного к-ва точек:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
;; Рекурсия
 
(defun print-points (n)
  (cond ((= n 0) (terpri)) 
        (t (prints ".") (print-points (- n 1))))) ;; в CL - princ
 
 
==> PRINT-POINTS
 
(print-points 5)
.....
 
==> NIL
 
;; итерация
 
(defun print-points (n)
   (dotimes (i n)
    (prints ".")) (terpri))
 
==> PRINT-POINTS
 
(print-points 5)
.....
 
==> NIL
Добавлено через 2 минуты
Подсчет к-ва символов в списке:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
;; Рекурсия
 
(defun count-sym (lst x)
  (if (null lst) 0 (+ (if (eq (car lst) x) 1 0) (count-sym (cdr lst) x))))
 
==> COUNT-SYM
 
(count-sym '(a s d f a f g h) 'a)
 
==> 2
 
;; Итерация
 
(defun count-sym (lst x)
  (let ((c 0))
    (dolist (i lst c)
      (setq c (+ c (if (eq i x) 1 0))))))
 
==> COUNT-SYM
 
(count-sym '(a s d f a f g h) 'a)
 
==> 2
Добавлено через 28 минут
Упражнение 9.

Суммирование списка без nil. Классическая ошибка императивного программиста - он думает, что после выполнения
(remove nil lst) список lst изменится, а это не так. Правильный путь - результат удаления дать на вход apply:

Lisp
1
2
(defun summit (lst)
  (apply #'+ (remove nil lst)))
Добавлено через 1 минуту
В рекурсивном коде нет терминальной ветви (анализа случая, когда список lst пуст). Правильно так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun summit (lst)
  (if (null lst) 0 (+ 
        (let ((x (car lst)))
              (+ (if (null x) 0 x) (summit (cdr lst)))))))
 
 
 
==> SUMMIT
 
(summit '(1 2 nil nil 5))
 
==> 8
2
panins899
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 7
04.10.2016, 15:20  [ТС] 4
Catstail, объясните пожалуйста в упражнении 8А 4 строчку(почему n=0 и что такое Terpri), не могу её понять
0
Catstail
Модератор
23763 / 11843 / 2070
Регистрация: 12.02.2012
Сообщений: 19,244
04.10.2016, 16:30 5
terpri - это функция вывода символа "перевод строки". А условие ((= n 0) (terpri)) означает: "если n=0, точек печатать не надо; перейти на новую строку и выйти из функции). Это называется "терминальная ветвь рекурсии"
1
__py__
67 / 137 / 13
Регистрация: 29.02.2016
Сообщений: 796
04.10.2016, 18:00 6
если что-то подзабыл/пропустил, то легко вспомнить всё в try lisp туториале http://learnlispthehardway.org/try-lisp/

Добавлено через 23 минуты
или вот ещё диалект lisp http://www.tryclj.com/
2
04.10.2016, 18:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2016, 18:00

застрял с программой
Помогите данный массив FAX(x,G) дополнить функцией которая справа от нее. Я ее...

Застрял на гете
intval($_GET) Гет запрос пустой, тем немее выдает ошибку Notice:...

Застрял на функции
Всем привет, вот мой код. <?php for ($i=0; $i < 5; $i++) { echo $i.'<br>';...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru