注: これは一種の宿題であり、そうではありません。最終的な目標は、数値のリストとして関数に提供される一連の数値の累乗を生成する関数を作成することです。関数の再帰バージョンがありますが、ソリューション内の明示的な再帰関数 ( など) を同等のラムダのみの式に置き換えるいくつかの方法を見つける必要がありappend
ますmapm
。
そのため、小さな問題から始めて、それらをすべて組み合わせて完全な関数を作成したいと考えています。純粋なラムダ (Y コンビネーター) を使用して非再帰的な階乗関数を思い付くことができましたが、現在、リスト内のすべての数値を 2 乗する素敵な関数を考え出そうとしています。ジャンプする前に小さな問題を解決しようとしています。乗算再帰関数まで:
(define (sqrlist numlist)
(((lambda (f)
((lambda (x) (x x))
(lambda (g)
(f (lambda (x) ((g g) x))))))
(lambda (f)
(lambda (x)
(cons (sqr (first x)) (rest x))))) numlist))
上記のコードは、その前に Y コンビネータが存在するにもかかわらず、再帰しません。適切なパラメータを内部の関数に渡す際に問題が発生していることは明らかです。アイデアはありますか?