質問

を使用していF#をラムダ計算.私は現在、こだわったそうとしていることをどのように実施の固定点のオペレーターとも呼ぶに対するY combinator).

と思うんです。現代の差別を受けた。

type Expr =
 | Const of int
 | Plus  of Expr * Expr
 | Times of Expr * Expr
 | Minus of Expr * Expr
 | Div   of Expr * Expr
 | Neg   of Expr
 | Var   of string
 | Fun   of string * Expr
 | App   of Expr * Expr
 | If    of Expr * Expr * Expr

eval 機能のようです。以下の例ではすべてその成果が期待.
例1:
> eval (Fun("x",Plus(Const 7,Var("x"))));;
val it : Expr = Fun ("x",Plus (Const 7,Var "x"))
例2:
> eval (App(Fun("x",Plus(Const 7,Var("x"))),Const 3));;
val it : Expr = Const 10
例3:
> eval (If(Const 0,Const 3,Const 4));;
val it : Expr = Const 4

していましたが、もともと、私が困難な実施の固定点のオペレーター内にラムダ計算.定義されている こちらの
Y = lambda G. (lambda g. G(g g)) (lambda g. G(g g))

いたの?またその他に関するご質問はY combinatorできなかったかもしれませんので、何とに成功します。

すべての援よろしくお願いいたします。

編集: Typoのコー---従っ Mult の代わりに Minus の差別を受ける。もうっ!

役に立ちましたか?

解決

あなたが言及しているバージョンは怠zyな言語でのみ機能し、あなたの言語が怠zyな評価戦略を使用していない場合、あなたは無限のループに閉じ込められます。これを翻訳してみてください:

Y = lambda G. (lambda g. G(lambda x. g g x)) (lambda g. G(lambda x. g g x))

他のヒント

してましたけれども、私の記憶では、全体のクラスのY Combinatorsにuntypedラムダ計算で取得しでは取り組むことが難しいものが言語には厳しく入力が人々のためにはない特別な場合にはMLのものF#.ていることに対して非常に有用な場合語再帰支援(ラムダ計算しない).というものが議論の話題がるStackoverflowが<日本語仮抄訳>欧州連セージ"プログラミング"又はMLもあると思うが、一見するた:

Y-Combinatorの実践例

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