> 1 <

Автор Сообщение

Graboid

Members


Статус

7 сообщений

Где: Uganda
Род занятий:
Возраст:

#3839   2011-01-11 23:14 GMT+3 часа(ов)      
Помогите пожалуйсто!!! Препод у нас ничего толком не обьяснил и надавал задач. Потому нахожусь в прострации. Помогите если сможете!!!
Вот задания:
1.Функция REMOVE – удаляет из списка все совпадающие с данным атомом элементы и возвращает в качестве значения список из всех оставшихся элементов
2.Функция DEVPAIR – разбивает список на пары.
Пример: исходный список – (a b c d ...), результи рующий список – ((a b)(c d)...)

Заранее всем огромное спасибо!!!!

отредактировал(а) Graboid: 2011-01-12 00:08 GMT+3 часа(ов)

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3840   2011-01-11 23:52 GMT+3 часа(ов)      
(defun removeif (L A)
(cond
((null L) nil)
((eq (car L) A) (removeif (cdr L) A))
(T (cons (car L) (removeif (cdr L) A)))))
 
(defun topair (L)
(cond
((null L) nil)
((= (length L) 1) L)
(T (cons (list (car L) (cadr L)) (topair (cddr L))))))

Преподов козлами не называй, на будущее, многие умеют пользоваться интернетом.
З.Ы. Что, действительно сложно?
I wish I'd made you angry earlier

Graboid

Members


Статус

7 сообщений

Где: Uganda
Род занятий:
Возраст:

#3841   2011-01-12 00:05 GMT+3 часа(ов)      
Я написал тоже самое сказал что неправельно((((

Graboid

Members


Статус

7 сообщений

Где: Uganda
Род занятий:
Возраст:

#3842   2011-01-12 00:06 GMT+3 часа(ов)      
ему через define надо

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3843   2011-01-12 00:11 GMT+3 часа(ов)      
это схема. Щас только drracket
#lang racket
(define (removeif L A)
(cond
((null? L) null)
((eq? (car L) A) (removeif (cdr L) A))
(else
(cons (car L) (removeif (cdr L) A)))))
 
#lang racket
(define (topair L)
(cond
((null? L) null)
((= (length L) 1) L)
(else (cons (list (car L) (cadr L)) (topair (cddr L))))))
I wish I'd made you angry earlier

Graboid

Members


Статус

7 сообщений

Где: Uganda
Род занятий:
Возраст:

#3844   2011-01-12 00:17 GMT+3 часа(ов)      
это уже ближе к тому что он хочет

Graboid

Members


Статус

7 сообщений

Где: Uganda
Род занятий:
Возраст:

#3845   2011-01-12 00:22 GMT+3 часа(ов)      
megamanx СПАСИБО тебе большущее

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3846   2011-01-12 00:34 GMT+3 часа(ов)      
моё чсв over 9000!
I wish I'd made you angry earlier

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3847   2011-01-12 01:10 GMT+3 часа(ов)      
(= (length L) 1)
эквивалентно
(null? (cdr L))

ander-skirnir

Members


Статус

227 сообщений
http://lisper.ru
Где: Ukraine
Род занятий: `'`,`',`',
Возраст: 30

#3848   2011-01-12 02:27 GMT+3 часа(ов)      
На CL можно еще так:
 
(defun %remove (el list)
(loop :for x :in list
:unless (equal x el)
:collect x))
 
(defun devpair (list)
(loop :for (a b) :on list
:when b :collect `(,a ,b)))

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3849   2011-01-12 21:03 GMT+3 часа(ов)      
(define (%remove el lst)
(for/list ([a lst]
#:when (not (equal? a el)))
a))
(define (dummy-seq first second list)
(make-do-sequence
(lambda ()
(values first
second
list
(lambda (l) (if (null? l) #f l))
(lambda (v) #t)
(lambda (l v) #t)))))
 
(define (devpair lst)
(for/list ([(a b)
(in-parallel (dummy-seq car
(lambda (l)
(if (pair? (cdr l))
(cddr l)
(cdr l)))
lst)
(dummy-seq (lambda (l)
(if (pair? (cdr l))
(cadr l)
(void)))
(lambda (l)
(if (pair? (cdr l))
(cddr l)
(cdr l)))
lst))]
#:when (not (void? b)))
(list a b)))
 
(define (devpair2 lst)
(for/list ([el (make-do-sequence
(lambda ()
(values (lambda (l)
(if (pair? (cdr l))
(list (car l) (cadr l))
(void)))
(lambda (l)
(if (pair? (cdr l))
(cddr l)
(cdr l)))
lst
(lambda (l) (if (null? l) #f l))
(lambda (v) #t)
(lambda (l v) #t))))]
#:when (not (void? el)))
el))
 
> (%remove 'a '(a v f a s d a))
'(v f s d)
> (devpair '(1 2 3 4 5))
'((1 2) (3 4))
> (devpair2 '(1 2 3 4 5))
'((1 2) (3 4))

2 ander-skirnir:
Исправьте devpair.

отредактировал(а) misha: 2011-01-12 21:11 GMT+3 часа(ов)

ander-skirnir

Members


Статус

227 сообщений
http://lisper.ru
Где: Ukraine
Род занятий: `'`,`',`',
Возраст: 30

#3850   2011-01-13 00:49 GMT+3 часа(ов)      
Да, точно:
(defun devpair (list)
(loop :for (a b) :on list
:by #'cddr :collect `(,a ,b)))


Интересно, а даёт ли на этой задаче параллелизм выигрыш?

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3852   2011-01-13 16:41 GMT+3 часа(ов)      
> Интересно, а даёт ли на этой задаче параллелизм выигрыш?
Только если будем рассматривать огромный вектор(10 млн.), а не список.
Чуть более производительные варианты:
(define (dummy-seq first next list 
[check (lambda (l) (if (null? l) #f l))])
(make-do-sequence
(lambda ()
(values first
next
list
check
(lambda (v) #t)
(lambda (l v) #t)))))
 
(define (devpair3 lst)
(for/list ([el (dummy-seq (lambda (l)
(list (car l) (cadr l)))
cddr
lst
(lambda (l)
(if (or (null? l)
(null? (cdr l)))
#f l)))])
el))
 
(define (devpair4 lst)
(for/list ([(a b)
(in-parallel (dummy-seq car
cddr
lst
(lambda (l)
(if (null? l) #f l)))
(dummy-seq cadr
cddr
lst
(lambda (l)
(if (null? (cdr l)) #f l))))])
(list a b)))

отредактировал(а) misha: 2011-01-13 17:37 GMT+3 часа(ов)

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3853   2011-01-13 16:47 GMT+3 часа(ов)      
(define (topair L)
(cond
((null? L) null)
((null? (cdr L)) L)
(else (cons (list (car L) (cadr L)) (topair (cddr L))))))
 
(define l (build-list 1000000 add1))
 
> (collect-garbage)
> (time (begin (devpair3 l) #t))
cpu time: 281 real time: 282 gc time: 0
#t
> (collect-garbage)
> (time (begin (devpair4 l) #t))
cpu time: 344 real time: 359 gc time: 0
#t
> (collect-garbage)
> (time (begin (topair l) #t))
cpu time: 1203 real time: 1203 gc time: 421
#t

отредактировал(а) misha: 2011-01-13 17:37 GMT+3 часа(ов)

Graboid

Members


Статус

7 сообщений

Где: Uganda
Род занятий:
Возраст:

#3879   2011-01-21 19:01 GMT+3 часа(ов)      
Всем большое СПАСИБО!!!!

yaas

Members


Статус

1 сообщений

Где: ---
Род занятий:
Возраст:

#5405   2011-12-27 19:28 GMT+3 часа(ов)      
Дан список из 10 целых чисел. Составить программу, вычисляющую произведение всех четных элементов списка за исключение нуля. помогите пожалуйста срочно надо
> 1 <


Онлайн :

0 пользователь(ей), 43 гость(ей) :