2016-06-17 8 views
1

私は学校の割り当てのためのスキームでプログラムを実行しようとしています。リストがあれば、そのリストのすべての順列を返すことになっています。私の問題は、なぜそれが数字ではなく文字では機能しないのか分からないことです。それは論理のいずれかを変更するように見えません!ここでスキーム内のリストの順列は数字ではなくリスト内の要素としての文字として機能します

は私のコードです:

(define (remove1 x lst) 
    (cond  
    ((null? lst)  '())  
    ((= x (car lst)) (remove1 x (cdr lst)))  
    (else   (cons (car lst) 
          (remove1 x (cdr lst)))))) 

(define (permute lst) 
    (cond  
    ((= (length lst) 1) (list lst))  
    (else    (apply append (map (lambda (i) 
              (map (lambda (j) (cons i j)) 
                (permute (remove1 i lst)))) 
              lst))))) 

(permute '(1 2 3)) 
+0

文字を並べ替える試みはありません。 –

答えて

1

=は数字を比較するために使用されます。より一般的な比較のために、eq?,equal?または(示唆されているように)eqv?を使用してください。

+1

または、おそらく 'eqv? '。 –

関連する問題