Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
8 / 6 / 2
Регистрация: 29.11.2017
Сообщений: 206
1

Normalize

24.11.2018, 09:49. Показов 1088. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Функции для normalize : +-normalize , sqrt-normalize , sin-normalize. Каждой функции передается
выражение, представляющее корректный вызов соответствующей функции. Нормализация будет заключаться
в унификации количества аргументов функции и нормализации аргументов:
(+-normalize expr) : Если expr — вызов функции + без аргументов, то нормализованным выражением
должен быть ноль — 0 .
Если expr — вызов
(+ e1)
(вызов функции с одним аргументом), то нормализованным выражением должно являться e1' —
нормализованное выражение, полученное из e1 .
Если expr — вызов
(+ e1 e2 ... e3 e4 e5)
то он должен быть преобразован к виду
(+ e1' (+ e2' ... (+ e3' (+ e4' e5'))...))
где ei' обозначает нормализованное выражение, полученное из ei . То есть, после нормализации
любой вызов функции + должен иметь два аргумента.

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun normalize (expr)
  (cond 
    ((atom expr) expr)  
    ((+? expr) (+-normalize expr))
    ((-? expr) (--normalize expr))
    ((*? expr) (*-normalize expr))
    ((/? expr) (/-normalize expr))
    ((expt? expr) (expt-normalize expr))
    ((sqrt? expr) (sqrt-normalize expr))
    ((sin? expr) (sin-normalize expr))
    ((cos? expr) (cos-normalize expr))
    ((tan? expr) (tan-normalize expr))
    ((asin? expr) (asin-normalize expr))
    ((acos? expr) (acos-normalize expr))
    ((atan? expr) (atan-normalize expr))
    ((exp? expr) (exp-normalize expr))
    ((log? expr) (log-normalize expr))
    (T (error 'on-unknown-expression))))
Lisp
1
2
3
4
5
6
7
(defmacro result-test (fun num test-expr)
  `(progn
    (format T "function: ~A ~30,2Ttest: ~A ~Tresult: ~A~%" 
            ',fun ,num
            (handler-case 
               ,test-expr
             (T () NIL)))))
ТЕСТЫ:
Lisp
1
2
3
4
5
6
(result-test +-normalize 1
  (equal (normalize '(+)) 0)) 
 
(result-test +-normalize 2
  (equal (normalize '(+ 1 2 3 4 5 6))
         '(+ 1 (+ 2 (+ 3 (+ 4 (+ 5 6)))))))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2018, 09:49
Ответы с готовыми решениями:

NORMALIZE ME BABY...
Нaскoлькo вы нoрмaлизуете вaши бaзы дaнных? Сегoдня прoспoрил с индийским тoвaришем чaс. Ему лень...

Универсальный селектор не переопределяет значений из normalize
Здравствуйте. <!DOCTYPE html> <html> <head> <title>test</title> <meta...

normaliz.dll(или normalize.dll) не найден
С рабочего стола пропали все значки, а когда пытаюсь открыть их через диспетчер, выдает...

Философия normalize.css и reset.css
Всем привет. Использовал поиск по форуму, но так и не нашел ясного ответа. Из поиска видно, что...

10
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 168
05.12.2019, 12:52 2
Так никто и не ответит ? (тоже интересует эта тема).
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37302 / 20736 / 4272
Регистрация: 12.02.2012
Сообщений: 34,127
Записей в блоге: 14
06.12.2019, 09:35 3
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun +-normalize (expression)
  (cond ((atom expression) expression)
        ((eq '+ (car expression))
         (cond ((null (cdddr expression))
                (cons '+ (list (cadr expression) (caddr expression))))
               (t (cons '+ (list (+-normalize (cadr expression))
                           (+-normalize (cons '+ (cddr expression))))))))
        (t expression)))  
 
==> +-NORMALIZE
 
(+-normalize '(+ 1 (+ 2 3) 4 5 6))
==> (+ 1 (+ (+ 2 3) (+ 4 (+ 5 6))))
0
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 168
06.12.2019, 11:39 4
А короче имеется возможность сделать без проверок, с учётом использования функций +?, make+.
(написано "Определение каждой функции — от 2-х до 5-ти строк кода.")
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37302 / 20736 / 4272
Регистрация: 12.02.2012
Сообщений: 34,127
Записей в блоге: 14
06.12.2019, 11:53 5
vvs79, что значит "короче"? Если нормализуется произвольное выражение, то в целом будет только длиннее. И мне, в общем, безразлично, что там "написано".
0
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 168
06.12.2019, 13:00 6
Спасибо.

Добавлено через 44 минуты
А как сделать, чтобы в случае неудачи возвращала 0, а не NIL ?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37302 / 20736 / 4272
Регистрация: 12.02.2012
Сообщений: 34,127
Записей в блоге: 14
09.12.2019, 09:55 7
Цитата Сообщение от vvs79 Посмотреть сообщение
чтобы в случае неудачи
- какой неудачи?
0
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 168
09.12.2019, 12:05 8
Неправильно выразился. Например (normalize '(+)) возвращает (+ NIL NIL), а надо чтобы возвращал 0.
"Если expr — вызов функции + без аргументов, то нормализованным выражением должен быть ноль — 0".
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37302 / 20736 / 4272
Регистрация: 12.02.2012
Сообщений: 34,127
Записей в блоге: 14
09.12.2019, 12:25 9
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(defun +-normalize (expression)
  (cond ((atom expression) expression)
        ((eq '+ (car expression))
         (cond ((null (cdr expression)) 0)
               ((null (cdddr expression))
                   (cons '+ (list (cadr expression) (caddr expression))))
               (t (cons '+ (list (+-normalize (cadr expression))
                           (+-normalize (cons '+ (cddr expression))))))))
        (t expression)))  
 
==> +-NORMALIZE
 
(+-normalize '(+ 1 (+ 2 3) 4 5 6))
==> (+ 1 (+ (+ 2 3) (+ 4 (+ 5 6))))
 
(+-normalize '(+))
==> 0
1
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 168
09.12.2019, 15:39 10
А вот тут:
(+-normalize '(+ 1 (+ 2 3) 4 5 6))
==> (+ 1 (+ (+ 2 3) (+ 4 (+ 5 6))))
нед должно быть просто
(+-normalize '(+ 1 (+ 2 3) 4 5 6))
==> (+ 1 (+ 2 3) (+ 4 (+ 5 6)))) ?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37302 / 20736 / 4272
Регистрация: 12.02.2012
Сообщений: 34,127
Записей в блоге: 14
09.12.2019, 16:20 11
Цитата Сообщение от vvs79 Посмотреть сообщение
нед должно быть просто
(+-normalize '(+ 1 (+ 2 3) 4 5 6))
==> (+ 1 (+ 2 3) (+ 4 (+ 5 6)))) ?
- не должно. Суть нормализации в том, что каждое сложение становится бинарной операцией. А у тебя у первого плюса три операнда
0
09.12.2019, 16:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2019, 16:20
Помогаю со студенческими работами здесь

The line endings in the following file are not consistent. Do you want to normalize the line endings?
Добрый день!! У меня периодически выскакивает окно с таким уведомлением: The line endings in the...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru