> 1 <

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

st4s

Members


Статус

7 сообщений

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

#1714   2010-03-28 19:28 GMT+3 часа(ов)      
Помогите решить задача(((((
1. написать функцию, удаляющу. подсписки заданной глубины.

2.Даны два списка L-произовльный список. Pos - список позици.Списки по длинне равны....Создать список
в котором элементы списка L помещены на позиции, номер которых задан соотвествующими элементами списка Pos
Пример:
L=(system atom type list) Pos (4 1 3 2)
Новый список (atom list type sysmem)

Михаил

Members


Статус

120 сообщений

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

#1716   2010-03-28 22:12 GMT+3 часа(ов)      
(define (remove-sublist lst k)
(if (= k 0)
lst
(cdr (remove-sublist lst (- k 1)))))
;(remove-sublist '(1 2 3 4 5 6) 3) ==> (4 5 6)
(define (list-pos lst pos)
(let ((n (length lst))
(a (map cons pos lst)))
(do ((k n (- k 1))
(r '() (cons (cdr (assq k a)) r)))
((= k 0) r))))
;(list-pos '(system atom type list) '(4 1 3 2)) ==>
; ==> (atom list type system)

VH

Members


Статус

289 сообщений

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

#1717   2010-03-28 23:00 GMT+3 часа(ов)      
1. Элементы исходного списка находятся на глубине 0.
(defun F (L N)
(cond
((null L) nil)
((atom (car L)) (cons (car L) (F (cdr L) N)))
((zerop N) (F (cdr L) N))
(T (cons (F (car L) (1- N)) (F (cdr L) N)))))

st4s

Members


Статус

7 сообщений

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

#1718   2010-03-28 23:42 GMT+3 часа(ов)      
VH. А на уровне 1 - не удаляет "'(((1 2)2 3)12 32 21)"

Михаил. Можно как нить через рекурсию?

VH

Members


Статус

289 сообщений

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

#1719   2010-03-28 23:45 GMT+3 часа(ов)      
Удаляет:
> (F '(((1 2) 2 3) 12 32 21) 1)
((2 3) 12 32 21)
> (F '(((1 2) 2 3) 12 32 21) 0)
(12 32 21)
>

st4s

Members


Статус

7 сообщений

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

#1721   2010-03-28 23:51 GMT+3 часа(ов)      
Просто у меня Ским

(define (F L N)

(cond

((null? L) '())

((not(pair? (car L))) (cons (car L) (F (cdr L) N)))

((= N 0) (F (cdr L) N))

(else (cons (F (car L) (- 1 N)) (F (cdr L) N)))))

вот так будет кажется.

VH

Members


Статус

289 сообщений

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

#1722   2010-03-28 23:52 GMT+3 часа(ов)      
По сути - одно и то же.
Вероятно, вместо (atom) в Scheme - (atom?), а вместо (zerop) можно (= N 0) <но заметьте, что (zerop) - одноместная функция, а (=) - двухместная>.

VH

Members


Статус

289 сообщений

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

#1723   2010-03-28 23:56 GMT+3 часа(ов)      
То же самое:
(defun F (L N)
(if L
((lambda (elem result)
(cond
((atom elem) (cons elem result)
((zerop N) result)
(T (cons (F elem (1- N)) result))))
(car L)
(F (cdr L) N))))

отредактировал(а) VH: 2010-03-29 00:03 GMT+3 часа(ов)

misha

Moderators


Статус

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

#1724   2010-03-28 23:58 GMT+3 часа(ов)      
Цитата
VH :
По сути - одно и то же.
Вероятно, вместо (atom) в Scheme - (atom?), а вместо (zerop) можно (= N 0) <но заметьте, что (zerop) - одноместная функция, а (=) - двухместная>.

zerop аналог zero?

st4s

Members


Статус

7 сообщений

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

#1725   2010-03-29 00:02 GMT+3 часа(ов)      
(define L '(((1 (2 (2 4) 3) 2)2 3)12 32 21))

(F L 3)

выводит весь список

VH

Members


Статус

289 сообщений

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

#1726   2010-03-29 00:09 GMT+3 часа(ов)      
( ((1 - атом глубины 2
(2 - атом глубины 3
(2 4) - список глубины 3 (подлежит исключению)
3 - атом глубины 3
) - список глубины 2
2 - атом глубины 2
) - список глубины 1
2 - атом глубины 1
3 - атом глубины 1
) - список глубины 0
12 - атом глубины 0
32 - атом глубины 0
21 - атом глубины 0
)
> (F '(((1 (2 (2 4) 3) 2) 2 3) 12 32 21) 3)
(((1 (2 3) 2) 2 3) 12 32 21)
>

st4s

Members


Статус

7 сообщений

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

#1727   2010-03-29 00:15 GMT+3 часа(ов)      
на Ским видно по другому...выводи реально весь список
там вот "atom?" нету чет(((((у меня PLT Scheme

st4s

Members


Статус

7 сообщений

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

#1728   2010-03-29 00:41 GMT+3 часа(ов)      
Так Спасибо за вторую

Первую надо как нить без рекурсии

Михаил

Members


Статус

120 сообщений

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

#1729   2010-03-29 00:41 GMT+3 часа(ов)      
> 1. Элементы исходного списка находятся на глубине 0.
Извиняюсь, я спутал глубину с длиной.

> (else (cons (F (car L) (- 1 N)) (F (cdr L) N)))))
Замените (- 1 N) на (- N 1).

misha

Moderators


Статус

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

#1730   2010-03-29 01:20 GMT+3 часа(ов)      
Возможно, немного намудрил))
(define (remove-sublist lst k)
(if (zero? k)
(apply append
(map (lambda(x)
(if (list? x) '() (list x)))
lst))
(map (lambda(x)
(if (list? x)
(remove-sublist x (- k 1))
x))
lst)))
(define (list-pos l p)
(map (let* ((n 0)
(pl (map cons p l))
(++n (lambda() (set! n (+ n 1)) n)))
(lambda(x)
(cdr (assq (++n) pl))))
l))
 

VH

Members


Статус

289 сообщений

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

#1731   2010-03-29 01:23 GMT+3 часа(ов)      
«Первую надо как нить без рекурсии»
Здравствуй, Бейсик, недолго ты прятался.

Михаил

Members


Статус

120 сообщений

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

#1732   2010-03-29 01:42 GMT+3 часа(ов)      
> Михаил. Можно как нить через рекурсию?
(define (list-pos lst pos)
(letrec
((n (length lst))
(a (map cons pos lst))
(r (lambda (k)
(if (> k n)
'()
(cons (cdr (assq k a))
(r (+ k 1)))))))
(r 1)))

st4s

Members


Статус

7 сообщений

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

#1738   2010-03-29 13:55 GMT+3 часа(ов)      
Цитата
VH :
«Первую надо как нить без рекурсии»
Здравствуй, Бейсик, недолго ты прятался.



нет, я не бейсик...нам в универе сказала "делайте вот задачи" и всё....кто как делает их...
> 1 <


Онлайн :

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