2010-12-05 9 views
0

スキーム内で任意の数の引数を取ることができる独自のカスタム<関数を作成しようとしています。これをどうやってやりますか?スキームのn-ary関数

私は(と(< x y)(b < y))のような何かをしなければならないと思っていますが、わかりません。うまく

+0

うーん...それは**どういう意味**(B

+1

@Karl:標準スキームでは、 '<'は引数リストがソート順であれば '#t'を返します。私は 'b <'が同じことをすると思います。 'と(

+1

スキームの '<'関数_already_は、0を含む任意の数の引数を取ります。カスタム '<'関数が必要なのはなぜですか? –

答えて

3

はより少なくより操作バイナリとしてb<を使用して、スキーム内の1つのように動作します<の実装です:

(define (< . args) 
    (cond 
    [(null? args) #t] 
    [(null? (cdr args)) #t] 
    [(b< (car args) (car (cdr args))) 
    (apply < (cdr args))])) 
+0

ありがとうございます。私は実際にリストの/ cdrをチェックするために、またはステートメントを持っていることを除いて、似たようなバージョンをやってしまった –

2

、オフを開始するために、あなたはその後、数字は引数を含むリストになります

(define (my-< . numbers) 
    <body> 
) 

ようなもので可変引数関数を定義します。そこから任意の数の引数に対して動作するように、ある種のループまたは再帰が必要です。ここで

+0

これに 'case-lambda'を追加するのが好きです。 (http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-6.html) –

+0

私はその機能の一部を持っています。 –