2017-07-09 4 views
-2

リストとkを取得し、kのサイズで置換を取得するScheme関数(1つの関数 - 重要)を実装することが可能です。 k = 2は、{1,1}、(1,2)、(1,3)、(2,1)、(2,2)、.....}(9つのオプション)を出力する。より多くの関数を定義することなくkサイズの置換を作成する

+2

もちろんです。何を試しましたか? –

+0

もっと多くの関数を定義するとどういう意味ですか? 1つのグローバルのみを公開したい、またはローカル関数を作成することを制限していますか?匿名関数でも問題ありませんか?質問が表示されない限り、コードを含む回答は得られません。あなたがこれまでに試したことを教えてください!編集ボタンを使用します。 – Sylwester

答えて

-1

限り、あなたは、ラムダを持っているように何かを定義せずに何かをする、その可能:

(define (fib n) 
    ;; bad internal definition 
    (define (helper n a b) 
    (if (zero? n) 
     a 
     (helper (- n 1) b (+ a b)))) 
    (helper n 0 1)) 

をZコンビネータを使用して:私たちはの値を代入できるよう

(define Z 
    (lambda (f) 
    ((lambda (g) 
     (f (lambda args (apply (g g) args)))) 
    (lambda (g) 
     (f (lambda args (apply (g g) args))))))) 

(define (fib n) 
    ((Z (lambda (helper) 
     (lambda (n a b) 
      (if (zero? n) 
       a 
       (helper (- n 1) b (+ a b)))))) 
    n 0 1)) 

は、今、私たちはZを呼び出すことはありません関数のZをZとすると、同じことが実行されます。

(define (fib n) 
    (((lambda (f) 
     ((lambda (g) 
     (f (lambda args (apply (g g) args)))) 
     (lambda (g) 
     (f (lambda args (apply (g g) args)))))) 
    (lambda (helper) 
     (lambda (n a b) 
     (if (zero? n) 
      a 
      (helper (- n 1) b (+ a b)))))) 
    n 0 1)) 

ここで、Sa Alonzo Churchでved。

-1

それだけではありません。ただloopを使用してください:

(define permute 
    (lambda (k lst) 
    (let loop ((result (map list lst)) 
       (i 1)) 
     (if (= i k) 
      result 
      (loop 
      ;; code to add each element of the original list 
      ;; to each element of the result list 
      (1+ i)))))) 
関連する問題