Программа Racket для создания списков списка [duplicate]

Говорят, что ваш list является List объектов, не указанных. Это значит, что Java не знает, какие объекты находятся внутри списка. Затем, когда вы хотите итерировать список, вы должны использовать каждый элемент, чтобы иметь доступ к свойствам этого элемента (в данном случае, String).

В общем, это лучшая идея параметризации коллекции , поэтому у вас нет проблем с преобразованием, вы сможете добавлять элементы параметризованного типа, и ваш редактор предложит вам подходящие методы.

private static List<String> list = new ArrayList<String>();
6
задан Will Ness 17 December 2013 в 02:13
поделиться

4 ответа

Вот еще одна реализация, после нескольких тестов она кажется быстрее, чем ответ Криса для более крупных списков. Он был протестирован с использованием стандартного Racket:

(define (powerset aL)
  (if (empty? aL)
      '(())
      (let ((rst (powerset (rest aL))))
        (append (map (lambda (x) (cons (first aL) x))
                     rst)
                rst))))
3
ответ дан Óscar López 20 August 2018 в 14:21
поделиться
  • 1
    Да, это была оригинальная реализация, которую я написал (поскольку это более прямолинейно, чем версия, которую я в конце концов опубликовал, и, таким образом, это было интуитивно на ум), но мне не понравился порядок полученных элементов. (Я знаю, с каких пор наборы заказов, правда?) Тем не менее, есть +1. :-) – Chris Jester-Young 17 December 2013 в 05:41

Вот моя реализация набора мощности (хотя я тестировал его только с использованием стандартного языка Racket, а не Beginning Student):

(define (powerset lst)
  (if (null? lst)
      '(())
      (append-map (lambda (x)
                    (list x (cons (car lst) x)))
                  (powerset (cdr lst)))))

(Благодаря samth , чтобы напомнить мне, что flatmap называется append-map в Racket!) [/ ​​g2]

3
ответ дан Community 20 August 2018 в 14:21
поделиться
  • 1
    Мне нравится это решение, оно проще, чем тот, который я опубликовал, и хороший пример, показывающий использование append-map. Интересно, почему он медленнее? – Óscar López 17 December 2013 в 16:35
  • 2
    Никаких лямбда в BSL. – ben rudgers 17 December 2013 в 21:12

В Racket,

#lang racket

(define (power-set xs)
  (cond
    [(empty? xs) (list empty)]                 ; the empty set has only empty as subset
    [(cons? xs)  (define x  (first xs))        ; a constructed list has a first element
                 (define ys (rest  xs))        ; and a list of the remaining elements
                 ;; There are two types of subsets of xs, thouse that
                 ;; contain x and those without x.
                 (define with-out-x            ; the power sets without x
                   (power-set ys))                 
                 (define with-x                ; to get the power sets with x we 
                   (cons-all x with-out-x))    ; we add x to the power sets without x
                 (append with-out-x with-x)])) ; Now both kind of subsets are returned.

(define (cons-all x xss)
  ; xss is a list of lists
  ; cons x onto all the lists in xss
  (cond
    [(empty? xss) empty]
    [(cons?  xss) (cons (cons     x (first xss))    ; cons x to the first sublist
                        (cons-all x (rest xss)))])) ; and to the rest of the sublists

Чтобы проверить:

(power-set '(a b c))
7
ответ дан Will Ness 20 August 2018 в 14:21
поделиться
7
ответ дан Will Ness 31 October 2018 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: