質問

第9のSchemer、ゼの機能

(define Q 
  (lambda (str n) 
    (cond 
      ((zero? (remainder (first$ str ) n)) 
        (Q (second$ str ) n)) 
      (t (build (first$ str ) 
        (lambda ( ) 
          (Q (second$ str ) n))))))) 

(define P
  (lambda (str)
    (build (first$ str)(lambda () (P (Q str (first$ str)))))))

を提案する評価が行われ、以下の実行例:

(frontier (P (second$ (second$ int)))  10)

ただし書のP、Qの機能Common Lisp?

してくれてありがとうございますのY Combinator自分のがんの発見はこの挑戦)

--ヘルパーの機能--

(define frontier
  (lambda (str n)
    (cond
      ((zero? n) (quote ()))
        (t (cons (first$ str) (frontier (second$ str) (sub1 n)))))))

(define str-maker
  (lambda (next n)
    (build n (lambda () (str-maker next (next n))))))

(define int (str-maker add1 0))

(define second$
  (lambda (str)
    ((second str))))

(define first$ first)

(define build
  (lambda (a1 a2)
    (cond
      (t (cons a1
        (cons a2 (quote ())))))))))

(define first
  (lambda (p)
    (cond
       (t (car p)))))

(define second
  (lambda (p)
    (cond
      (t (car (cdr p))))))

(define add1 
  (lambda (n)
    (+ 1 n)))

(define remainder 
  (lambda  (n m)
    (cond
      (t (- n (* m (/ n m ))))))

(免責事項この課題の質問では自分の理解と学習)

役に立ちましたか?

解決

とん:

  • Pの定義は、"Q(str(第$str)))"また"Q str(第$str)"としてのQは二つの引数を取る機能です。
  • の構築 ではのヘルパーを作っている最初$や$作品: リスト

この翻訳のスキームへのCommon Lispに受けとる:

(defun first$ (list) (first list))
(defun second$ (list) (funcall (second list)))
(defun build (a b) (list a b))

(defun frontier (str n)
  (if (zerop N)
    ()
    (cons (first$ str) (frontier (second$ str) (1- n)))))

(defun str-maker (next n)
  (list n (lambda () (str-maker next (funcall next n)))))

(setq int-maker (str-maker #'1+ 0))

(defun Q (str n)
  (if (zerop (rem (first$ str) n))
    (Q (second$ str) n)
    (list (first$ str) (lambda () (Q (second$ str) n)))))

(defun P (str)
  (list (first$ str) (lambda () (P (Q str (first$ str))))))

(frontier (P (second$ (second$ int-maker))) 10)

最後の行を返します:

(2 3 5 7 11 13 17 19 23 29)

をよく知られているシリーズで展開しているので、この翻訳が成功した:-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top