2015-03-12 2 views
2

Мне нужна помощь, определяющая функцию схемы, которая принимает раздел (список списков) и возвращает список пар, представляющий отношение эквивалентности. Я начал писать код, но понимаю, что иду в неправильном направлении. Я смотрел на это часами без каких-либо успехов.Отношение эквивалентности схемы

(define partition 
    (lambda (piv l p1 p2) 
    (if (null? l) 
     (list p1 p2) 
     (if (< (car l) piv) 
      (partition piv (cdr l) (cons (car l) p1) p2) 
      (partition piv (cdr l) p1 (cons (car l) p2)))))) 

Однако функция должна работать таким образом, таким образом, что (partition ’((3 4) (5))) возвращение ((3 3) (3 4) (4 3) (4 4) (5 5))

Любая помощь будет принята с благодарностью

+0

'(автомобиль '((3 4) (5))); ==> (3 4) '. Это не числовое. Я не понимаю, как у вас есть один аргумент в вашем примере, который переводится в 4 в вашей процедуре и каково это преобразование. Как будет '(раздел '((2 3 4) (1 5) (10)))' смотреть? – Sylwester

+0

Да, я понимаю, что код, который я перечислял, действительно идет в неправильном направлении. Мне нужно выяснить, как написать функцию, которая вернет список пар для отношения эквивалентности. Я так потерялся – Bill

ответ

0

Другим примером может быть полезным. Исходя из предположения, что все элементы списка членов эквивалентны друг другу, этого может быть достаточно:

(define (partition lol) ; lol, list of lists 
    (apply append 
     (map 
      (lambda (liszt) 
       (apply append (map 
        (lambda (elem) 
         (map 
          (lambda (other) 
           (list elem other)) 
          liszt)) 
        liszt))) 
      lol))) 
Смежные вопросы