2017-04-10 9 views
0

My機能は、以下のようになります入力を受け入れる必要があります。スキームで余分なリストレベルを取り除くには?

(getlist '(a b '(a b) 1 2 '() '(1 2))) 

機能しなければならないし、元のリスト内のリストのすべてのリストを出力。だから、出力は

"((a b)()(1 2))" 

ようにする必要がありますが、私はこれを取得しています:

"((quote (a b)) (quote()) (quote (1 2)))" 

私は右の値を取得していますが、それらが接続されているすべての引用符で余分なリスト内にラップされています。これをどうやって解決するのですか?

はありがとうございました

入力リストが本当にリスト (quote (a b))(quote())、および (quote (1 2))を含んでいますのでです
;function to return all lists in a list 
(define (getlist lst) 
    ;if list is empty 
    (if (null? lst) 
     ;true 
     '() 
     ;false 
     (if (list? (car lst)) 
      ;true 
      (cons (car lst) (getlist (cdr lst))) 
      ;false 
      (getlist (cdr lst))))) 
+0

'getlist'は' filter'実装しています:

修正プログラムは、最も外側の1以外のすべての引用符を削除するのですか? '(フィルタリストを「(AB(AB)1 2()(1 2 ))) ' – suchtgott

答えて

2


シンボルquoteは評価されません。

'は「リスト作成」演算子ではありません。
quote特殊形式の略語で、引数が評価されないようにします。

リスト全体が引用されているので、は評価されていません。つまり、(quote (a b))です。結果はリスト(quote (a b))です。

> (getlist '(a b (a b) 1 2() (1 2))) 
'((a b)() (1 2)) 
+0

それはうまくいった!ありがとうございました。 – user2905256

関連する問題