Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.11.2016
Сообщений: 3

Lisp Функции

27.11.2016, 21:20. Показов 1864. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста решить задание
Вычислить значения следующих вызовов с пошаговым объяснением:

1. (apply ’cons ’(a b));

2. (funcall ’cons ’(a b));

3. (funcall ’apply ’cons ’(a b));

4. (funcall ’cons ’apply ’(a b)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2016, 21:20
Ответы с готовыми решениями:

Функции в Lisp
Здравствуйте! Нужно написать некоторые функции, а так как осень плохо разбираюсь в Lisp, то для меня это трудно. Очень нужна помощь. ...

Написать функции на LISP
Написать 1) функцию, которая по списку ‘(q w e r t y) строит сложный список (q (w (e (r (t (y)))))). 2) функцию, которая по...

Решение функции на LISP
Помогите решить задачу во вложении. Нужно вычичислить значение функции на LISP.

2
230 / 199 / 71
Регистрация: 21.10.2016
Сообщений: 449
28.11.2016, 06:41
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Цитата Сообщение от sil96 Посмотреть сообщение
Вычислить значения следующих вызовов с пошаговым объяснением:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
1)----------------------------------------------------------------------------------------
[3]> (step (apply 'cons '(a b)))
шаг 1 --> (APPLY 'CONS '(A B))    ; Входим в функцию apply с аргументами 'cons и '(a b)
Step 1 [4]> :s
шаг 2 --> 'CONS                          ; Вычисление первого аргумента 'cons
Step 2 [5]> :s
шаг 2 ==> значение: CONS                 ; Результатом вычисления будет просто cons
шаг 2 --> '(A B)                         ; Вычисление второго аргумента '(a b)
Step 2 [6]> :s
шаг 2 ==> значение: (A B)                ; Результатом вычисления будет (a b)         
шаг 1 ==> значение: (A . B)       ; Функция apply применяет функцию cons к аргументам в списке (a b)
(A . B)                           ; Результатом будет пара (a . b)
 
; То же самое можно было написать проще: 
(cons 'a 'b)
(A . B)
 
2)--------------------------------------------------------------------------------------
(step (funcall 'cons '(a b)))
шаг 1 --> (FUNCALL 'CONS '(A B))    ; Входим в функцию funcall с аргументами 'cons и '(a b)
Step 1 [12]> :s
шаг 2 --> 'CONS                         ; Вычисление первого аргумента 'cons
Step 2 [13]> :s
шаг 2 ==> значение: CONS                ; Результатом вычисления будет просто cons
шаг 2 --> '(A B)                        ; Вычисление второго аргумента '(a b)
Step 2 [14]> :s
шаг 2 ==> значение: (A B)               ; Результатом вычисления будет (a b)
*** - APPLY: слишком мало аргументов для CONS    ; Неудачная попытка функции funcall
Имеются следующие варианты продолжения:          ; применить функцию cons к аргументу (a b)
ABORT          :R1      Прервать главный цикл    ; Дело в том, что в отличии от функции apply,
                                                 ; которая "скармливает" аргументы для cons
                                                 ; оптом, в списке (a b), см. выше,
                                                 ; функция funcall "скармливает" аргументы для cons
                                                 ; в розницу, "в рассыпуху". Нужно два аргумента,
                                                 ; а по факту один - (a b).
; Чтобы выражение сработало, нужно аргументы для cons записать по отдельности:
(funcall 'cons 'a 'b)
(A . B)
 
3)---------------------------------------------------------------------------------------
(step (funcall 'apply 'cons '(a b)))
шаг 1 --> (FUNCALL 'APPLY 'CONS '(A B))    ; Входим в функцию funcall с аргументами 'apply 'cons '(a b)
Step 1 [18]> :s
шаг 2 --> 'APPLY                                ; Вычисление первого аргумента 'apply
Step 2 [19]> :s
шаг 2 ==> значение: APPLY                       ; Результатом будет просто apply
шаг 2 --> 'CONS                                 ; Вычисление второго аргумента 'cons
Step 2 [20]> :s
шаг 2 ==> значение: CONS                        ; Результатом будет просто cons
шаг 2 --> '(A B)                                ; Вычисление третьего аргумента '(a b)
Step 2 [21]> :s 
шаг 2 ==> значение: (A B)                       ; Результатом будет просто (a b)
шаг 1 ==> значение: (A . B)                ; Функция funcall "скармливает" функции apply аргументы cons и (a b).
(A . B)                                    ; В свою очередь функция apply "скармливает" функции cons
                                           ; два аргумента в списке (a b).
                                           ; Результатом будет пара (a . b)
 
4)---------------------------------------------------------------------------------------
(step (funcall 'cons 'apply '(a b)))
шаг 1 --> (FUNCALL 'CONS 'APPLY '(A B))    ; Входим в функцию funcall с аргументами 'cons 'apply и '(a b)
Step 1 [23]> :s
шаг 2 --> 'CONS                        ; Вычисление первого аргумента 'cons
Step 2 [24]> :s
шаг 2 ==> значение: CONS               ; Результатом вычисления будет просто cons
шаг 2 --> 'APPLY                       ; Вычисление второго аргумента 'apply
Step 2 [25]> :s
шаг 2 ==> значение: APPLY              ; Результатом вычисления будет просто apply
шаг 2 --> '(A B)                       ; Вычисление третьего аргумента '(a b)
Step 2 [26]> :s
шаг 2 ==> значение: (A B)              ; Результатом вычисления будет просто (a b)
шаг 1 ==> значение: (APPLY A B)             ; Функция funcall "скармливает" функции cons
(APPLY A B)                                 ; аргументы apply и (a b).
                                            ; Функция cons прицепляет символ apply к списку (a b).
                                            ; Результатом будет список (apply a b).
----------------------------------------------------------------
Ууууууфффффффффффффффффф
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
28.11.2016, 14:07
Вот как это выглядит в HomeLisp:

Code
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
;; (apply 'cons '(a b))
 
.EVAL вход: (APPLY (QUOTE CONS) (QUOTE (A B)))
..LIST вход: A=((QUOTE CONS) (QUOTE (A B)))
...EVAL вход: (QUOTE CONS)
...EVAL выход: CONS
...EVAL вход: (QUOTE (A B))
...EVAL выход: (A B)
..LIST выход: Рез=(CONS (A B))
..APPLY вход: A1=CONS A2=(A B)
...LIST вход: A=((QUOTE A) (QUOTE B))
....EVAL вход: (QUOTE A)
....EVAL выход: A
....EVAL вход: (QUOTE B)
....EVAL выход: B
...LIST выход: Рез=(A B)
...CONS вход: A1=A A2=(B)
...CONS выход: Рез=(A . B)
..APPLY выход: Рез=(A . B)
.EVAL выход: (A . B)
 
;; (funcall 'cons '(a b))
 
.EVAL вход: (FUNCALL (QUOTE CONS) (QUOTE (A B)))
..LIST вход: A=((QUOTE CONS) (QUOTE (A B)))
...EVAL вход: (QUOTE CONS)
...EVAL выход: CONS
...EVAL вход: (QUOTE (A B))
...EVAL выход: (A B)
..LIST выход: Рез=(CONS (A B))
..FUNCALL вход: A1=CONS A2=((A B))
...LIST вход: A=((QUOTE (A B)))
....EVAL вход: (QUOTE (A B))
....EVAL выход: (A B)
...LIST выход: Рез=((A B))
...CONS вход: A1=(A B) A2=NIL
...CONS выход: Рез=ERRSTATE
..FUNCALL выход: Рез=ERRSTATE
.EVAL выход: ERRSTATE
 
;; (funcall 'apply 'cons '(a b))
 
.EVAL вход: (FUNCALL (QUOTE APPLY) (QUOTE CONS) (QUOTE (A B)))
..LIST вход: A=((QUOTE APPLY) (QUOTE CONS) (QUOTE (A B)))
...EVAL вход: (QUOTE APPLY)
...EVAL выход: APPLY
...EVAL вход: (QUOTE CONS)
...EVAL выход: CONS
...EVAL вход: (QUOTE (A B))
...EVAL выход: (A B)
..LIST выход: Рез=(APPLY CONS (A B))
..FUNCALL вход: A1=APPLY A2=(CONS (A B))
...LIST вход: A=((QUOTE CONS) (QUOTE (A B)))
....EVAL вход: (QUOTE CONS)
....EVAL выход: CONS
....EVAL вход: (QUOTE (A B))
....EVAL выход: (A B)
...LIST выход: Рез=(CONS (A B))
...APPLY вход: A1=CONS A2=(A B)
....LIST вход: A=((QUOTE A) (QUOTE B))
.....EVAL вход: (QUOTE A)
.....EVAL выход: A
.....EVAL вход: (QUOTE B)
.....EVAL выход: B
....LIST выход: Рез=(A B)
....CONS вход: A1=A A2=(B)
....CONS выход: Рез=(A . B)
...APPLY выход: Рез=(A . B)
..FUNCALL выход: Рез=(A . B)
.EVAL выход: (A . B)
 
;; (funcall 'cons 'apply '(a b))
 
.EVAL вход: (FUNCALL (QUOTE CONS) (QUOTE APPLY) (QUOTE (A B)))
..LIST вход: A=((QUOTE CONS) (QUOTE APPLY) (QUOTE (A B)))
...EVAL вход: (QUOTE CONS)
...EVAL выход: CONS
...EVAL вход: (QUOTE APPLY)
...EVAL выход: APPLY
...EVAL вход: (QUOTE (A B))
...EVAL выход: (A B)
..LIST выход: Рез=(CONS APPLY (A B))
..FUNCALL вход: A1=CONS A2=(APPLY (A B))
...LIST вход: A=((QUOTE APPLY) (QUOTE (A B)))
....EVAL вход: (QUOTE APPLY)
....EVAL выход: APPLY
....EVAL вход: (QUOTE (A B))
....EVAL выход: (A B)
...LIST выход: Рез=(APPLY (A B))
...CONS вход: A1=APPLY A2=((A B))
...CONS выход: Рез=(APPLY A B)
..FUNCALL выход: Рез=(APPLY A B)
.EVAL выход: (APPLY A B)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2016, 14:07
Помогаю со студенческими работами здесь

Две функции на lisp
Здравствуйте, помогите решить две задачи на lisp: 1) Функция, которая принимает 2 аргумента список и число, функция возвратит элемент из...

Числовые функции LISP
Здравствуйте, необходимо решить 3 задачи: 1. Подсчитать число и сумму цифр целого N. Попробовал, написал 2 проги, а объединить не могу. ...

Функции на Visual Lisp
Помогите с записью функций на лиспе... Есть наработки, но вроде не верные: http://s017.***********/i437/1209/c9/8e90a356da43.jpg (sqrt...

Ошибка в маленькой функции-Lisp
Здравствуйте, недавно начала изучать Lisp. При вводе данных в функцию (DEFUN proverka(X) (if ((SECOND X) EQUAL NIL ) (PRINC...

Книги или другой источник, где описана история версий Lisp и Common Lisp
Доброго времени суток.Такой вопрос,знаете какой-нибудь источник,где описана история версий Lisp и Common Lisp.Только не всякие...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru