Следующая страница > 1 < [2]

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

leest

Members


Статус

12 сообщений

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

#1557   2010-03-15 20:37 GMT+3 часа(ов)      
Здравствуйте, помогите пожалуйста решить задачку:
Необходимо написать функцию (count p x), которая подсчитывает, сколько атомов в списке х удовлетворяет предикату р (р-функция или функциональное имя). Список х не предполагается одноуровневым. Заранее спасибо!

Михаил

Members


Статус

120 сообщений

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

#1561   2010-03-16 01:46 GMT+3 часа(ов)      
(define (atom? x)
(or (symbol? x) (number? x) (boolean? x) (char? x) (string? x) (null? x)))
 
(define (count-right p x)
(cond ((atom? x) (if (p x) 1 0))
((list? x) (cons '+ (map (lambda (y) (count-right p y)) x)))))

leest

Members


Статус

12 сообщений

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

#1565   2010-03-16 02:13 GMT+3 часа(ов)      
Михаил,Спасибо. Но как я понимаю это не xLisp? Будьте добры, если вас не затруднит, и вы разбираетесь также и в xLispe написать код для него. Но все равно премного благодарен, за помощь!

misha

Moderators


Статус

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

#1566   2010-03-16 02:17 GMT+3 часа(ов)      
Цитата
Михаил :
(define (atom? x)
(or (symbol? x) (number? x) (boolean? x) (char? x) (string? x) (null? x)))
 
(define (count-right p x)
(cond ((atom? x) (if (p x) 1 0))
((list? x) (cons '+ (map (lambda (y) (count-right p y)) x)))))


Я тебя чуть поправил, дабы не начали поносить схемеров.
(define (atom? x) (not (pair? x)))
И зачем давать отладочные версии функций?
Перепиши на xLisp-е. Или это сделать мне?

Михаил

Members


Статус

120 сообщений

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

#1567   2010-03-16 02:20 GMT+3 часа(ов)      
> если вас не затруднит
А Вас не затруднит самому это сделать?

> (define (atom? x) (not (pair? x)))
Учи матчасть. Опять себя позоришь.

misha

Moderators


Статус

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

#1568   2010-03-16 02:22 GMT+3 часа(ов)      
>> (define (atom? x) (not (pair? x)))
>Учи матчасть. Опять себя позоришь.
Читай СИКП!!! И не позорься!!!
А может тебе ссылку дать? Узри что есть атом

Михаил

Members


Статус

120 сообщений

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

#1569   2010-03-16 02:30 GMT+3 часа(ов)      
> Читай СИКП!!!
Охохо, мишаня почитай на досуге r5rs 3.2 Disjointness of types. Может тебе это даст хоть какую-то ясность в голове.

misha

Moderators


Статус

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

#1570   2010-03-16 02:34 GMT+3 часа(ов)      
Не смешно!! Ты ведь даже не знаешь определения атома)))))
Узри что есть атом

Михаил

Members


Статус

120 сообщений

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

#1571   2010-03-16 02:52 GMT+3 часа(ов)      
Нет, всё же port и vector я не осмелюсь отнести к атомам. Я только забыл procedure добавить. Так что угомони свой пыл.

misha

Moderators


Статус

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

#1572   2010-03-16 03:03 GMT+3 часа(ов)      
Смирись, атом - это объект не состоящий из cons ячеек.
[1]> (atom #(1 2 3))
T
Ты слишком рано начинаешь поносить. Вот и получается как у Булгакова в "Собачьем сердце".

Михаил

Members


Статус

120 сообщений

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

#1574   2010-03-16 03:43 GMT+3 часа(ов)      
А ты незнаешь, что такое foldl, foldr и думаешь что они существуют только в PLT Pretty Big. А еще, ты ставишь ублюдочные смайлики и по шесть восклицательных знаков в строке.

VH

Members


Статус

289 сообщений

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

#1576   2010-03-16 09:54 GMT+3 часа(ов)      
(defun COUNT (P X)
(if X
(+
(if (atom (car X))
(if (funcall P (car X)) 1 0)
(COUNT P (car X)))
(COUNT P (cdr X)))
0))

leest

Members


Статус

12 сообщений

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

#1578   2010-03-16 10:44 GMT+3 часа(ов)      
Михаил, если бы я понимал как перевести это хLisp я бы с удовольствием не просил.. вообще привык разбираться сам, но во имя быстрого освоения, прошу совета у вас. Всем спасибо за обсуждение, и за решение. Кстати, вы не подскажите, что это у вас за программка с цветными скобками и функциями?? а то устал открывающиеся и закрывающиеся скобочки подсчитывать)))

misha

Moderators


Статус

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

#1579   2010-03-16 13:00 GMT+3 часа(ов)      
Цитата
Михаил :
А ты незнаешь, что такое foldl, foldr и думаешь что они существуют только в PLT Pretty Big. А еще, ты ставишь ублюдочные смайлики и по шесть восклицательных знаков в строке.

Какой я плохой))) Давай Мишаня объясняй мне что такое свертка))) И почему ты её не увидел в моем коде хотя она там была(правда неявная), тоже объясни.

отредактировал(а) misha: 2010-03-16 13:27 GMT+3 часа(ов)

Михаил

Members


Статус

120 сообщений

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

#1582   2010-03-16 20:56 GMT+3 часа(ов)      
> объясняй мне что такое свертка)))
Это то, о чем бы ты возможно и не узнал и продолжал бы изобретать велосипед: "она там была(правда неявная)".

Михаил

Members


Статус

120 сообщений

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

#1583   2010-03-16 21:12 GMT+3 часа(ов)      
> но во имя быстрого освоения, прошу совета у вас.
VH уже написал Вашу программу на xLisp.

> Кстати, вы не подскажите, что это у вас за программка с цветными
> скобками и функциями?? а то устал открывающиеся и закрывающиеся
> скобочки подсчитывать)))
Используйте тег code. XLisp+ 3.04 for Windows "подсвечивает" cкобки.

misha

Moderators


Статус

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

#1584   2010-03-16 21:13 GMT+3 часа(ов)      
Дело не в велосипедах, а в эффективности. И еще, плохо использовать foldl и foldr когда у нас есть SRFI-1.

Михаил

Members


Статус

120 сообщений

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

#1586   2010-03-16 21:50 GMT+3 часа(ов)      
> Дело не в велосипедах, а в эффективности.
Ты на таких примерах задумываешься об эффективности?! Пора тебе познакомиться с принципом KISS и правилом экономии: "время программиста дорого; сократите его, используя машинное время". И, кстати, докажи, что твое решение эффективнее.

> И еще, плохо использовать foldl и foldr когда у нас есть SRFI-1.
Ты про это: http://srfi.schemers.org/srfi-1/srfi-1.html#fold? Решил к словам придраться?

misha

Moderators


Статус

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

#1587   2010-03-16 21:58 GMT+3 часа(ов)      
Использование не стандартных функций уменьшает переносимость кода. А время программиста, как ты знаешь, дорого)) Да и твоя функция реализована не проще моей. Это так к слову.

misha

Moderators


Статус

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

#1588   2010-03-16 22:18 GMT+3 часа(ов)      
>И, кстати, докажи, что твое решение эффективнее.
foldr реализована сложнее чем:
(define (foldr fun start lst)
(if (null? lst)
start
(fun (car lst) (foldr fun start (cdr lst)))))

Михаил

Members


Статус

120 сообщений

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

#1589   2010-03-16 23:52 GMT+3 часа(ов)      
> Использование не стандартных функций уменьшает переносимость кода.
> А время программиста, как ты знаешь, дорого))
Ok. Я же не говорю, что я с этим несогласен.

> Да и твоя функция реализована не проще моей.
Да, не проще, если конечно же не знать, что такое свертка.

> foldr реализована сложнее чем...
Ты про какой foldr сейчас говоришь, где реализована?

misha

Moderators


Статус

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

#1590   2010-03-17 00:10 GMT+3 часа(ов)      
>Да, не проще, если конечно же не знать, что такое свертка.
Я думаю, что ты понимаешь как писать рекурсивные функции. В том примере, свертка списка foldr избыточна, и без нее можно обойтись.

>Ты про какой foldr сейчас говоришь, где реализована?
Тебе что реализовать? Могу если хочешь.

misha

Moderators


Статус

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

#1591   2010-03-17 00:38 GMT+3 часа(ов)      
2 leest:
То что определил Михаил, только на лиспе:
(defun  count-right (p x)
(cond
((atom x)
(if (funcall p x) 1 0))
((listp x)
(cons '+ (mapcar (lambda (y) (count-right p y)) x)))))

Михаил

Members


Статус

120 сообщений

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

#1592   2010-03-17 01:06 GMT+3 часа(ов)      
> А ты что не понимаешь как писать рекурсивные функции?
Я не понимаю зачем каждый раз изобретать велосипед.

> Тебе что реализовать? Могу если хочешь.
Напиши ту, что ты говорил "реализована сложнее чем" и докажи, что она будет менее эффективна, чем твоя "она там была(правда неявная)".

misha

Moderators


Статус

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

#1593   2010-03-17 01:25 GMT+3 часа(ов)      
>> А ты что не понимаешь как писать рекурсивные функции?
>Я не понимаю зачем каждый раз изобретать велосипед.
Повторюсь. В том примере, свертка списка foldr избыточна, и без нее можно обойтись.

>Напиши ту, что ты говорил "реализована сложнее чем" и докажи, что она будет менее эффективна, чем твоя "она там была(правда неявная)".
А что доказывать, сам увидишь:
(define (foldr fun start . lst)
(if (null? (apply append lst))
start
(apply fun
(append (map car lst)
(list (apply foldr
(append (list fun start)
(map cdr lst))))))))
(define (foldl fun start . lst)
(if (null? (apply append lst))
start
(apply foldl
(append (list fun)
(list (apply fun (append (map car lst)
(list start))))
(map cdr lst)))))
> (foldr list 'value '(+ - * /) '(1 2 3 4) '(5 6 7 8) '(a b c d))
(+ 1 5 a (- 2 6 b (* 3 7 c (/ 4 8 d value))))
> (foldl list 'value '(+ - * /) '(1 2 3 4) '(5 6 7 8) '(a b c d))
(/ 4 8 d (* 3 7 c (- 2 6 b (+ 1 5 a value))))

Михаил

Members


Статус

120 сообщений

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

#1594   2010-03-17 03:55 GMT+3 часа(ов)      
> Повторюсь. В том примере, свертка списка foldr избыточна
> Повторюсь.
Конечно, если изменять свои сообщения по несколько раз, то выходит, что повторяешься. Она не избыточна (в том примере), а точно к месту.

> и без нее можно обойтись.
Можно вообще только машиной Тьюринга обойтись.

> А что доказывать, сам увидишь
И что я должен увидеть? Что ты не можешь написать нормальную свертку?
(define ormap
(lambda (proc list1)
(and (not (null? list1))
(or (proc (car list1)) (ormap proc (cdr list1))))))
 
(define (fold-left f c as . bss)
(if (or (null? as)
(ormap null? bss))
c
(apply fold-left f
(apply f c (car as) (map car bss))
(cdr as) (map cdr bss))))
 
(define (fold-right f c as . bss)
(if (or (null? as)
(ormap null? bss))
c
(apply f
(apply fold-right f c (cdr as) (map cdr bss))
(car as) (map car bss))))
Вот, а теперь посчитай порядки роста (в зависимости от того, что ты там имел ввиду под эффективностью). Или что ты там вообще имел ввиду под эффективностью?

misha

Moderators


Статус

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

#1595   2010-03-17 04:52 GMT+3 часа(ов)      
>И что я должен увидеть? Что ты не можешь написать нормальную свертку?
Посмотри на свою. Я вырезал лишние яйца:
(define (foldr fun start . lst)
(if (null? (apply append lst))
start
(apply fun
(append (map car lst)
(list (apply foldr fun start
(map cdr lst)))))))
(define (foldl fun start . lst)
(if (null? (apply append lst))
start
(apply foldl fun
(apply fun (append (map car lst) (list start)))
(map cdr lst))))
Теперь дело за тобой.

misha

Moderators


Статус

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

#1596   2010-03-17 05:05 GMT+3 часа(ов)      
>Вот, а теперь посчитай порядки роста
Удали ormap, а иначе разговор не имеет смысла.
Ты просил сделать копии foldr и foldl, я сделал. И заметь, почти точные.

Михаил

Members


Статус

120 сообщений

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

#1597   2010-03-17 05:17 GMT+3 часа(ов)      
The fold operation terminates when the shortest list runs out of values:
(fold-right cons* '() '(a b c) '(1 2 3 4 5)) => (a 1 b 2 c 3)

misha

Moderators


Статус

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

#1599   2010-03-17 05:30 GMT+3 часа(ов)      
Мне повторить что ты просил? Я не могу удовлетворять твои сию минутные потребности.

отредактировал(а) misha: 2010-03-17 05:36 GMT+3 часа(ов)


Онлайн :

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