0

別の関数に入力として与えられた関数の入力にアクセスするにはどうすればよいかを理解する必要があります。

例えば; これを行うfという関数があります(define f (lambda (x) (if (null? x) #t (car x))))。このfを入力として受け取り、次のような別の関数を返す関数を作成する必要があります。

(twoback f)-関数fを入力として受け取る関数を定義します。

-出力として、次の動作をする新しい関数gを返す必要があります。

xが空のリストまたは長さ1のリストの場合、g(x)=#t。

 = f(y) where y=(cdr x) otherwise.

そして、関数は次のように呼び出されます:((twoback f3) (list #t #f #t #f))

だから実際に私の質問は:私が書くつもりの関数(twoback関数)の関数呼び出しで与えられたリストにどのようにアクセスできますか?空かどうかを確認する必要があるからです。

4

2 に答える 2

2

xパラメータをカリー化することによる短い答え。このようなもの:

(define twoback
  (lambda (f)
    (lambda (x)
      ...)))     ; fill-in with the logic requested

上記は、パラメータとしてtwoback受け取るという呼び出されたプロシージャを定義fし、次に、パラメータとして受け取る新しいプロシージャを返しxます。返されるこの2番目のプロシージャはg、質問で呼び出されたプロシージャです。このプロシージャから、通常どおりに両方fにアクセスできます。x

...ここで、期待される出力でパーツを完成させます。

于 2012-11-11T17:28:02.010 に答える
0

私はこれがあなたが意味していることだと思います:

(define (twoback f)
 (lambda (x)
  (if
   (or (null? x) (null? (cdr x)))
   #t
   (f (cdr x)))))
(define f (lambda (x) (if (null? x) #t (car x))))
于 2012-11-11T17:20:06.300 に答える