2015-10-14 6 views
2

Я новичок в LISP и не могу понять, что делает следующая LISP?Выход программы LISP

(setq A '(RIGHT ARE YOU)) 
(print (reverse (list (first (rest A))(first (rest (rest A))) (first A) 'HOW))) 

setq присваивает лексические переменные

ответ

2

Он печатает:

(HOW RIGHT YOU ARE) 

Первая строка присваивает список из 3-х элементов на символ A. Это указано для предотвращения оценки (RIGHT ARE YOU) как функции, называемой RIGHT. Вторая строка делает какую-то ненужную многословную и сложную логику для создания списка, состоящего из четырех элементов: строки HOW и трех элементов от A.

Ломая второй линии:

  • (first (rest A)) - это возвращает элемент YOU из A
  • (first (rest (rest A))) - это возвращает элемент ARE из A
  • (first A) - это возвращает элемент 'RIGHT' от A

Th теперь уходит с:

(print (reverse (list ARE YOU RIGHT 'HOW))) 

Какой LISP вы изучаете? Многие LISP имеют понятие REPL (цикл чтения-eval-print), который позволяет экспериментировать с сложными выражениями и разбивать их на более мелкие куски, чтобы понять результаты промежуточных шагов.

+0

как же положение Вас и изменения? – Beast

+0

Я только начинаю с книги. совершенно новичок. – Beast

+0

, который лизет диалект? – leeor

1

Возможно, это расшифровка REPL сессии в Common Lisp просветит:

CL-USER> (setq a '(right are you)) 
(RIGHT ARE YOU) 
CL-USER> (print (reverse (list (first (rest a)) (first (rest (rest a))) (first a) 'how))) 

(HOW RIGHT YOU ARE) 
(HOW RIGHT YOU ARE) 
CL-USER> a 
(RIGHT ARE YOU) 
CL-USER> (rest a) 
(ARE YOU) 
CL-USER> (cdr a) 
(ARE YOU) 
CL-USER> (first (rest a)) 
ARE 
CL-USER> (cadr a) 
ARE 
CL-USER> (rest (rest a)) 
(YOU) 
CL-USER> (cddr a) 
(YOU) 
CL-USER> (first (rest (rest a))) 
YOU 
CL-USER> (caddr a) 
YOU 
CL-USER> (first a) 
RIGHT 
CL-USER> (car a) 
RIGHT 
CL-USER> (values (first (rest a)) (first (rest (rest a))) (first a) 'how) 
ARE 
YOU 
RIGHT 
HOW 
CL-USER> (list (first (rest a)) (first (rest (rest a))) (first a) 'how) 
(ARE YOU RIGHT HOW) 
CL-USER> (list 'are 'you 'right 'how) 
(ARE YOU RIGHT HOW) 
CL-USER> (reverse '(are you right how)) 
(HOW RIGHT YOU ARE) 
CL-USER> '(how right you are) 
(HOW RIGHT YOU ARE) 
CL-USER> (print '(how right you are)) 

(HOW RIGHT YOU ARE) 
(HOW RIGHT YOU ARE) 
CL-USER> 
Смежные вопросы