1

基本的に、n、たとえば3が与えられた場合、TとFのすべての組み合わせの値のリストを作成するにはどうすればよいですか?

例えば。n = 3の場合、(make-bools 3)は((TTT)、(TTF)、...(FFF))を返す必要があります

これは、n個のブール値のすべての組み合わせを返す質問関数に似ていますか?しかし、スキームで実装する

4

2 に答える 2

3

これはRacketで機能します。

#lang racket

(define (generate-binary-combinations n)
  (if (zero? n)
      '(())
      (for*/list ((y (in-list (generate-binary-combinations (sub1 n))))
                  (x (in-list '(T F))))
        (cons x y))))

(generate-binary-combinations 3)
> '((T T T) (F T T) (T F T) (F F T) (T T F) (F T F) (T F F) (F F F))

(generate-binary-combinations 0)
> '(())
于 2012-04-24T02:53:15.023 に答える
1

最も効率的ではありません:

(define (make-bools n)
  (if (= n 0)
    '()
    (append (addhead 'T (make-bools (- n 1)))
            (addhead 'F (make-bools (- n 1))))))

; Yield copy of l with h added on to head of each list in l
(define (addhead h l)
  (if (null? l)
      l
      (cons (cons h (car l)) (addhead h (cdr l)))))
于 2012-04-24T00:49:44.010 に答える