powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / lisp перемножить многочлены
25 сообщений из 30, страница 1 из 2
lisp перемножить многочлены
    #35290616
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно реализовать функцию перемножения многочленов, если многочлены задаются в виде списков их коэффициентов. Помогите, пожалуйста, очень нужно!
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35290695
Фотография Fatty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем ясно как выглядят эти списки
но подозреваю, что следующее выражение
должно выполнить эту задачу:

Код: plaintext
(mapcar '* list_1 list_2)

~'J'~
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35290806
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знаете, это моя первая задача на lisp, поэтому я думаю, что препода не удовлетворит такое решение задачи. Вообще- то, мне кажется, что там ( в этих списках ) должны быть просто числа со знаками, которые нужно правильно перемножить и сложить, а затем объединить всё в один список, но я понятия не имею как это сделать...
Подскажите, пожалуйста, ещё.
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35290845
Фотография Fatty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи свои списки, тогда может смогу помочь

~'J'~
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35290965
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Любые списки, с какими сможешь с такими и подскажи.
Например, (2,-3,4) и (7,2,0).
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35291084
Фотография Fatty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну то же самое фактически:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
;; multy1
(defun multy1  (lst1 lst2)
  (cond	((or (null lst1) (null lst2)) nil)
	((and (atom (car lst1)) (atom (car lst2)))
	 (cons (* (car lst1) (car lst2))
	       (multy1 (cdr lst1) (cdr lst2))))
	(t
	 (cons (* (car lst1) (car lst2))
	       (multy1 (cdr lst1) (cdr lst2))))))
;; multy2
(defun multy2  (lst1 lst2)
  (mapcar '* lst1 lst2)
  )

;usage:

(setq result1 (multy1 '( 2  - 3   4 ) '(7 2 0)))
(setq result2 (multy2 '( 2  - 3   4 ) '( 7   2   0 )))

~'J'~
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35299568
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во-первых, объясните, пожалуйста, что это за t и для чего оно нужно.
Во-вторых, что мы получим в результате? У меня MIT/GNU Scheme не знаете как там запустить?
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35299846
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sotnyВо-первых, объясните, пожалуйста, что это за t и для чего оно нужно.
Во-вторых, что мы получим в результате? У меня MIT/GNU Scheme не знаете как там запустить?

1. t это ИСТИНА :)
2. Переписать на MIT Scheme Например defun превратиться в define, а t в #t (есть и более существенные отличия)

Если у тебя Схема, то и спрашивать надо было для схемы, а не для Лиспу
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35300965
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я же написала, что это моя первая задача. То, что вы сказали я исправила, но все равно не работает. ВОТ, что я исправила:
(define (multy1 lst1 lst2)
;null проверяет, является ли аргумент пустым списком
(cond ((or (null lst1) (null lst2)) nil)
((and (atom (car lst1)) (atom (car lst2)))
(cons (* (car lst1) (car lst2))
(multy1 (cdr lst1) (cdr lst2))
)
)
(#t
(cons (* (car lst1) (car lst2))
(multy1 (cdr lst1) (cdr lst2))
)
)
)
)
(setq result1 (multy1 `(2 -3 4) `(7 2 0)))
Пишет Unbound variable:null.
В чем дело, подскажите:(
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35301152
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sotny пишет:

> Я же написала, что это моя первая задача. То, что вы сказали я

Девушка, Scheme и LISP - немного разные вещи.
Вам написали программу на Common Lisp. Когда говорят "LISP"
в основном сейчас подразумевают Common Lisp.
Так что вам придется немного подкрутить ее на схему.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35302189
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто, в универе нам читали лекции и говорили, что это лекции по Лиспу, а оказалось, что они были по Схеме. Как переписать с Лиспа на схему я разобралась. Но функция работает не правильно. Например, если есть 2 списка: (1 2) и ( 3 4), то она 1*3 и 2*4, а надо: 1*3, 1*4, 2*3, 2*4.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
(define (multy1 lst1 lst2)
;null  проверяет, является ли аргумент пустым списком
  (cond	
    ((or (null? lst1) (null? lst2)) `())
	((and (if (=  1  (length lst1)) (car lst1)) (if (=  1  (length lst2)) (car lst2)))
	 (cons (* (car lst1) (car lst2))
	       (multy1 (cdr lst1) (cdr lst2))
        )
	)
	(#t
	 (cons (* (car lst1) (car lst2))
	       (multy1 (cdr lst1) (cdr lst2))
	    )
	)
  )
)
(multy1 `( 1   2 ) `( 3   4 ))
Подскажите, пожалуйста, как изменить.
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35302612
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sotny пишет:

> Просто, в универе нам читали лекции и говорили, что это лекции по Лиспу,
> а оказалось, что они были по Схеме.

Языка программирования LISP не существует. LISP - это и идея.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35304347
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sotnyПросто, в универе нам читали лекции и говорили, что это лекции по Лиспу, а оказалось, что они были по Схеме. Как переписать с Лиспа на схему я разобралась. Но функция работает не правильно. Например, если есть 2 списка: (1 2) и ( 3 4), то она 1*3 и 2*4, а надо: 1*3, 1*4, 2*3, 2*4.


Так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
(define (multy a b)
  (define (multb r a b)
    (cond ((null? b) r)
          (else (multb (append r (list (* a (car b))))
                       a (cdr b))))
  )
  (define (multa r a)
    (cond ((null? a) r)
          (else (multa (append r (multb '() (car a) b))
                       (cdr a))))
  )
  (multa '() a)
)
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35310202
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное!!!!!!!
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35311293
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, если нужно ещё привести подобные? Например, (x+2)*(3x+4), следовательно, списки получаются `(1 2) `(3 4), а результат должен быть следующим (3 10 8). Если кто может помогите, пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35315355
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовала вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
(define (mult lst1 lst2 res)
(define (multy1 lst1 lst2 r )
  (cond	
    ((or (null? lst1) (null? lst2)) `())
	(
	 (append r (map (lambda (x) (* (car lst1) x )) lst2) 
	       (multy1 (cdr lst1) lst2 r )
        )
	)
  )
 )
(multy1 lst1 lst2 `() )
(append res ((car r)(+(car(cdr r))(car(cdr(cdr r))))(car(cdr(cdr(cdr r))))))
)

(mult `( 1   2 ) `( 3   4 )`())
Пишет: Unbound variable:r. Не почему?
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35315855
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(append res ((car r)(+(car(cdr r))(car(cdr(cdr r))))(car(cdr(cdr(cdr r))))))

ни с чем не связано
(car (cdr (car blah-blah-blah))) -> (cadar blah-blah-blah)

а то уж слишком брутально
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35315858
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть некоторые сомнения в том что вы правильно понимаете блочную структуру
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35315861
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отсутствие else в cond тоже несколько смущает
медитирую над map-ой (никак не могу понять что за задачу вы решали и почему так ... замороченно) ?
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35316651
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Функция map берет элемент из первого списка и умножает его на каждый элемент второго списка.
Я не знаю как результат выполнения этой функции запихнуть в другой список, например, res и как потом по нему пройтись, чтобы это было связано?
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35317156
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sotnyФункция map берет элемент из первого списка и умножает его на каждый элемент второго списка.
Я не знаю как результат выполнения этой функции запихнуть в другой список, например, res и как потом по нему пройтись, чтобы это было связано?

Очевидно вызвав одну функцию из другой ?
Отвыкайте мыслить императивно, добро пожаловать в ФП ;)

Имеется сахар:

Код: plaintext
1.
2.
3.
(let ((var value))
   (f value)
)

который на самом деле:

Код: plaintext
1.
((lambda (var) (f var)) value)

Вы делаете парррразительные успехи (c) Кавказская пленница
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35318993
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написала вот так:
Код: plaintext
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.
(define (multy1 lst1 lst2 r)
;null  проверяет, является ли аргумент пустым списком
  ( 
  cond	
    ((or (null? lst1) (null? lst2)) `())
	(else
	 (let(res (concat  (cons (map (lambda (x) (* (car lst1) x )) lst2) 
	       (multy1 (cdr lst1) lst2 r)) r))(pod res)
        )
	)

  )
    
  )
  
(define (concat A B)
   (cond
      ((null? A) 
         (cond
             ((null? B) `())
             (else (concat B `()))
         ))
      (else (cons (car A) (concat (cdr A) B)))
   )
)
(define (copy l1 l2)
 ())

(define (pod alist)
 (append ((car alist)(+(cadr alist)(caddr alist))(cadddr alist)))
)

(multy1 `( 1   2 ) `(  3   4 ) `() )
Выдает:
ILL-FORMED special form: (let (res...)(pod res))
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35319837
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sotny
(let(res (concat (cons (map (lambda (x) (* (car lst1) x )) lst2)


let выглядит так:

Код: plaintext
1.
2.
3.
4.
(let ((var- 1  (...))
       (var- 2  (...) ...)
   ...
)

В общем-то по сообщению об ошибке можно было догадаться (как и в прошлый раз)
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35319842
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу, не ту скобку выделил :(
но мысль я думаю ясна
...
Рейтинг: 0 / 0
lisp перемножить многочлены
    #35321945
sotny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, ну не догоняю я как использовать этот Let, что я уже только не пробовала:
Код: plaintext
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.
(define (multy1 lst1 lst2 r)
  ( 
  cond	
    ((or (null? lst1) (null? lst2)) `())
	(else
	 (concat  (append 
	                     (map (lambda (x) (* (car lst1) x )) lst2) 
	                     (multy1 (cdr lst1) lst2 r)
						) r
	    )
    )
  )
 (let ((res (r)) (pod res))   
 )
)

(define (concat A B)
   (cond
      ((null? A) 
         (cond
             ((null? B) `())
             (else (concat B `()))
         ))
      (else (cons (car A) (concat (cdr A) B)))
   )
)

(define (pod alist)
 (append ((car alist)(+(cadr alist)(caddr alist))(cadddr alist)))
)

(multy1 `( 1   2 ) `(  3   4 ) `() )
Выдает:
ILL-FORMED special form: (let (... ...))
Ну в чем в конце-то концов дело?
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / lisp перемножить многочлены
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]