0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 2
1

Как сделать "оболочку" для функции?

13.04.2014, 09:08. Показов 646. Ответов 6
Метки нет (Все метки)

Приветствую всех! Преподаватель поставил условие, чтобы в рекурсивных функциях некоторые проверки выполнялись только один раз, а не при каждом рекурсивном её вызове. Например, рекурсивная функция, которая удаляет из списка N-ный элемент (я её уже написал). На вход подаётся список, и собственно сама позиция. И пока у меня функция каждый раз проверяет, является ли введённая позиция числом, а она должна проверятся единожды, т.к. во времени выполнения не меняется. Нужно написать ещё одну вспомогательную функцию, которая и будет рекурсивно вызываться, а в первой функции оставить проверку, и вызов второй функции? Как вы понимаете, в lisp'е я совсем ещё "зелёный", можно даже сказать салатовый, надеюсь на ваши советы
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2014, 09:08
Ответы с готовыми решениями:

[КуМир] Ввести символьную строку и заменить все буквы "а" на "б" и наоборот (как заглавные так и строчные)
ввести символьную строку и заменить все буквы а на буквы б и наоборот как заглавные так и строчные...

Как написать регулярное выражение для выдергивания английских букв и символов: "+", ",", ":", "-", " ", "!", "?" и "."
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и...

Как сделать проверку в строке "для дурака" с авто-заменой "," на "." - иначе вылетает
Помогите в программу "запилить" проверку ввода символа (Base, Pawer) "для дурака" с авто-заменой...

Как в sql реализован логич.тип?Как можно в sql сделать так,чтобы были только значения "0"и"1" или "да"и"Нет"?
Хочу использовать в таблице переменные логического типа, но не нашла ничего про логический тип в...

6
Модератор
Эксперт функциональных языков программированияЭксперт Python
29592 / 16155 / 3228
Регистрация: 12.02.2012
Сообщений: 26,731
Записей в блоге: 5
13.04.2014, 12:01 2
Вот функция, которая удаляет элемент списка из позиции n (нумерация с нуля):

Lisp
1
2
3
(defun del-pos (lst n)
  (cond ((zerop n) (cdr lst))
        (t (cons (car lst) (del-pos (cdr lst) (- n 1))))))
А вот функция-оболочка (HomeLisp):

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
(defun del-from-pos (lst n)
  (cond ((not (numberp n)) (raiseerror "Номер позиции не число"))
        ((not (listp lst)) (raiseerror "Первый аргумент не список"))
        (t (del-pos lst n))))
 
;; Проверка
 
(del-from-pos '(a s d f) 2)
 
==> (a s f)
 
(del-from-pos '(a s d f) 1)
 
==> (a d f)
 
(del-from-pos '(a s d f) 0)
 
==> (s d f)
 
(del-from-pos '(a s d f) 'j)
 
Номер позиции не число
==> ERRSTATE
 
(del-from-pos 'a 1)
 
Первый аргумент не список
==> ERRSTATE
3
0 / 0 / 0
Регистрация: 13.04.2014
Сообщений: 2
13.04.2014, 16:27  [ТС] 3
Catstail, Спасибо, значит я был прав, как раз Ваш HomeLisp и используется.
P.S. Во время поиска некоторого вопроса, заметил в одной теме на cyberforum Ваш совет обновить ядро программы, к которому Вы прилагали файлы. Если заменить файлы, то в заголовке программы будет показываться версия 1.13.17, то есть более ранняя версия, чем та, которая доступна на Вашем сайте, но в "Date" стоит более поздняя дата. Поэтому стало интересно, какая из них является более поздней.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
29592 / 16155 / 3228
Регистрация: 12.02.2012
Сообщений: 26,731
Записей в блоге: 5
13.04.2014, 16:31 4
Cкоро подготовлю еще одну версию и выложу на Форум.
0
Заблокирован
13.04.2014, 18:52 5
Цитата Сообщение от Catstail Посмотреть сообщение
Cкоро подготовлю еще одну версию и выложу на Форум.
имхо, не лучший вариант выкладывать обновления на форум, лучше выложить на офсайт, где их проще найти?
1
4406 / 3410 / 345
Регистрация: 12.03.2013
Сообщений: 5,893
13.04.2014, 22:07 6
Цитата Сообщение от xORand Посмотреть сообщение
На вход подаётся список, и собственно сама позиция. И пока у меня функция каждый раз проверяет, является ли введённая позиция числом
А зачем, можно полюбопытствовать?

Добавлено через 6 минут
Во, можете assert-ом сделать оболочку.
http://clhs.lisp.se/Body/m_assert.htm

Добавлено через 1 час 13 минут
Ой, у вас же HomeLisp, обдёрнулся.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
13.04.2014, 23:44 7
xORand, в терминологии обычно употребляется термин "обертка" -- wrapper (eng). Но есть возможности для обхода этой необходимости. Например карринг, локальные функции, больше пока на ум не приходит.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> 
;racket
;remove nth atom from list 'lst'
(define (foo lst n)
  (cond ((not (number? n)) (error "n is not number" n))
        ((not (list? lst)) (error "lst is not list" lst))
        ((or (>= n (length lst)) (< n 0) ) (error "impossible n" n))
        (else
         (let rec-foo ((l lst) (k n))
           (cond ((null? l) '())
                 ((= k 0) (rec-foo (cdr l) (- k 1)))
                 (else (cons (car l) (rec-foo (cdr l) (- k 1)))))))))
> (foo '(1 2 3 4) 2)
'(1 2 4)
> (foo '(1 2 3 4) -3)
. . impossible n -3
> (foo '(1 2 3 4) 4)
. . impossible n 4
> (foo (cons (cons 1 2) 3) 2)
. . lst is not list ((1 . 2) . 3)
>
Добавлено через 16 минут
fixme
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2014, 23:44

Как сделать, чтобы при попытке вставки функции для ячейки ячейка не "уезжала" с экрана?
Столкнулся с такой траблой. Хочу, короче чтобы значение в некоторой ячейке было функцией от...

Как сделать, чтобы поле "Сумма заказа" вычислялось исходя из данных полей "количество" и "Цена"
Здравствуйте. Допустим имеется поля &quot;Количество&quot; и &quot;Цена&quot;. Как сделать, чтобы поле &quot;Сумма...

Как сделать чтобы через запрос заполнялись характеристики поля: "значение по умолчанию", "формат rtf", "описание"?
SQL запрос создаёт таблицу. create table Группы (КодГруппы COUNTER CONSTRAINT PrimaryKey...

Темы msstyles. Как можно сделать, чтобы кнопки "Закрыть", "Развернуть" и "Свернуть" отображались слева, а не справа?
Хочу создать свою тему (через theme и msstyles) для Windows, чтобы там кнопки системного меню были...


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

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

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