Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241

Локальные, вспомогательные функции, функционалы

26.09.2010, 23:43. Показов 2970. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!! Помогите пожалуйста решить задачки на XLisp.

В первых двух задачах требуется для использовать локальные или вспомогательные функции. В третьей задаче требуется использовать функционалы. Для каждой задачи нужно описать алгоритм решения.

Задание № 1
Определите функцию (f s), вычисляющую знакочередующую сумму a1-a2+a3-a4+…+ak*(-1)^(k+1) для списка s, имеющего вид (a1 a2 a3 … ak).

Задание № 2
Определите функцию (f n), которая для натурального числа n вычисляет 1!+2!+3!+…+n!.

Задание № 3
Напишите функцию (count p x), которая подсчитывает, сколько атомов в списке x удовлетворяет предикату p (p – функция или функциональное имя). Список x не предполагается одноуровневым.

Заранее благодарен!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2010, 23:43
Ответы с готовыми решениями:

Вспомогательные функции, циклы
"Требуется составить программу на Common Lisp, в каждом задании по необходимости используя вспомогательные функции, циклы и т.п." ...

Пропадают локальные переменные функции после первого запуска функции
Я написал код для расчёта электрического кольца. Я постепенно упрощаю схему параллельными и последовательными операциями. Вот мой код: (...

Вывести вспомогательные данные из функции
#include "stdafx.h" #include <conio.h> #include <math.h> #include <iostream> #include <locale.h> #include "cmath" using...

9
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.09.2010, 05:45
  1. Lisp
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    (defun f1 (list)
      (labels ((sum (result is-positive list)
             (cond ((null list)
                result)
               (is-positive
                (sum (+ result (car list)) (not is-positive) (cdr list)))
               (t
                (sum (- result (car list)) (not is-positive) (cdr list))))))
        (sum 0 t list)))
    Определяем локальную функцию sum, которая с помощью хвостовой рекурсии в зависимости от аргумента is-positive прибавляет к результату или отнимает от результата очередной элемент списка. Следующий вызов sum происходит с аргументом is-positive, обратном текущему. Вызываем функцию sum из функции f1 c начальными значениями: 0 - результат, t - прибавить, list - весь список
  2. Lisp
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    (defun f2 (n)
      (labels ((sum-of-factorials (curr last-add result)
             (if (> curr n)
             result
             (let ((add (* last-add curr)))
               (sum-of-factorials (+ curr 1)
                          add
                          (+ result add))))))
        (sum-of-factorials 1 1 0)))
    Определяем итерацию в виде локальной рекурсивной функции sum-of-factorials. Условие остановки рекурсивных вызовов - когда элемент, факториал которого нужно вычислить, становится больше заданного числа n. В каждой итерации вычисляется очередной факториал на основе предыдущего слагаемого - если предыдущее слагаемое равно k! (k < n), то текущее слагаемое (текущий факториал) (k + 1)! = k! * (k + 1), и этот факториал прибавляется к результату. Начальные значения для вызова sum-of-factorials - 1 (первый элемент, факториал которого нужно вычислить), 1 (предыдущее значение факториала, т.е. 0!), 0 - текущий результат
  3. Lisp
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    (defun count-list-if (p lst)
      (cond ((null lst)
         0)
        ((atom lst)
         (if (funcall p lst)
             1
             0))
        (t
         (+ (count-list-if p (car lst))
            (count-list-if p (cdr lst))))))
    Ну тут все совсем просто. Перебираем элементы списка list (который также может содержать вложенные списки):
    1. если текущий элемент - пустой список, возвращаем 0
    2. если текущий элемент - атом, то:
      1. если он удовлетворяет предикату p, то возвращаем 1;
      2. в противном случае возвращаем 0
    3. если ни одно из предыдущих условий не выполнилось, то тогда lst - это список, вычисляем сумму количества элементов головы списка и хвоста списка, удовлетворяющих p
1
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
27.09.2010, 10:10  [ТС]
Респект!!!
0
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
05.10.2010, 22:26  [ТС]
Nameless One, можно для задач 2 и 3 пример трассировки, а то у меня не проходит. Ошибки выдает.
Вот первая задача проходит:
> (f1 ‘(1 2 3))
2
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
06.10.2010, 03:09
Цитата Сообщение от Sergio-X86 Посмотреть сообщение
Nameless One, можно для задач 2 и 3 пример трассировки, а то у меня не проходит. Ошибки выдает.
Какие?
0
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
06.10.2010, 15:38  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
Какие?
Для второй задачи:
> (f2 '(1 2 3))
error: bad argument type - (1 2 3)

А для третьей даже придумать ничего не могу...

Очень рассчитываю на помощь

Добавлено через 2 минуты
Со второй разобрался, там же в аргументах должно быть натурально число n, то есть выглядит примерно так
> (f2 5)
153

А вот в третью задачу все никак не получается подставить правильные аргументы...
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
06.10.2010, 15:47
Цитата Сообщение от Sergio-X86 Посмотреть сообщение
Для второй задачи:
> (f2 '(1 2 3))
error: bad argument type - (1 2 3)
прочитай внимательно само задание:
Цитата Сообщение от Sergio-X86 Посмотреть сообщение
Задание № 2
Определите функцию (f n), которая для натурального числа n вычисляет 1!+2!+3!+…+n!.
Вот оно:
Lisp
1
2
CL-USER> (f2 5)
153
Для третей:
Lisp
1
2
CL-USER> (count-list-if #'evenp '(1 2 3 (4 5 6 (7 8) 10) 12))
6
То же самое, но с использованием анонимной функции:
Lisp
1
2
3
4
5
CL-USER> (count-list-if 
      #'(lambda (x)
          (= (rem x 2) 0))
      '(1 2 3 (4 5 6 (7 8) 10) 12))
6
Здесь evenp - предикат, проверяющий, четное число или нет. В последнем варианте анонимная функция выполняет ту же проверку
1
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
06.10.2010, 21:18  [ТС]
А нельзя для третьей задачи вместо
Lisp
1
2
CL-USER> (count-list-if #'evenp '(1 2 3 (4 5 6 (7 8) 10) 12))
6
использовать
Lisp
1
2
CL-USER> (count-list-if 'evenp '(1 2 3 4 5))
2
???

Я вот просто не пойму зачем там в первом варианте столько вложенных скобок с числами?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
07.10.2010, 04:56
Цитата Сообщение от Sergio-X86 Посмотреть сообщение
А нельзя для третьей задачи вместо
Lisp
1
2
CL-USER> (count-list-if #'evenp '(1 2 3 (4 5 6 (7 8) 10) 12))
6
использовать
Lisp
1
2
CL-USER> (count-list-if 'evenp '(1 2 3 4 5))
2
???
Можно
Я вот просто не пойму зачем там в первом варианте столько вложенных скобок с числами?
В задании сказано:
Список x не предполагается одноуровневым
- это просто демонстрация того, что функция может работать с вложенными списками
1
58 / 24 / 6
Регистрация: 26.09.2010
Сообщений: 241
07.10.2010, 14:22  [ТС]
Понятно. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2010, 14:22
Помогаю со студенческими работами здесь

Найти значение M используя вспомогательные функции
Заданы 3 массива случайных вещественных чисел, определенной размерности: A, B, C. Необходимо вычислить значение M при помощи вычисления...

Написать вспомогательные функции вычисления длины отрезка
Помогите пожалуйста! Задан четырехугольник координатами вершин.Вычислить площадь четырёхугольника.Написать вспомогательные функции...

Как создать класс содержащий только вспомогательные функции
Всем доброго времени суток! Подскажите как создать класс в C++ содержащий только вспомогательные функции, чтобы подключив его h-файл, в...

Локальные функции
Создайте локальную функцию в main и вызовите ее. Формальные параметры функции – массив целых и строка. Функция должна вернуть кортеж,...

Локальные переменные в функции и её аргумент
Привет! Пишу функцию перевода десятичного числа в текст (не обсуждайте зачем и правильно ли я делаю) Суть такова, начало функции: ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru