2011-08-17 3 views
1

私は、関数がラムダフォームを返すシナリオを持っていますが、ラムダフォームを適用したいのに失敗しました。例:手続きとしてどのようにするか?

#lang racket 

(define tes (lambda() `(lambda() 100))) 
(tes) 
((tes)) 

結果は次のとおりです。

'(lambda() 100) 
. . procedure application: expected procedure, given: '(lambda() 100) (no arguments) 

は、その後どのように私は手続きとして `(ラムダ()100)することができますか?

答えて

1

内側のlambda式からバッククォートを削除すると動作します。別の方法として、あなたはバッククォート直後のunquoteはできたが、それはNOOPになる:

> (define tes (lambda() (lambda() 100))) 
> ((tes)) 
100 
> (define tes (lambda() `,(lambda() 100))) 
> ((tes)) 
100 
+0

hmm..what私はソースコードを変更することはできませんか?それは単に '(lambda()100)を返し、それを(lambda()100)に変更する方法を意味していますか? –

+0

@freezdom文字列とシンボルに関するあなたの質問に似ていますが、答えは 'eval'ですが、' eval'を使うのはおそらく正しい選択ではありません。おそらく、解決しようとしている全体的な問題を説明する質問を投稿することができます。それはおそらく小さな作品で答えを得るより効果的だろう。 – acfoltzer

+0

はい、そうですが、全体として問題を提示するのはちょっと難しいと思います.....基本的には、プログラム上でいくつかの変換を行っていますが、いくつかの用語を変更する必要があります。ソースコード '(lambda(xy)100)'の場合、変換プロセスは 'match'を使って'(lambda(xyz)100)を返します。 –

関連する問題