Partial applicationその3

更に色々使ってみる。

def func (x : int, y : string, z : double) : void { 
    System.Console.WriteLine ($"$x,$y,$z");
}

// 引数となるタプル
def t1 = (1, "two", 3.0);
def t2 = (2, 4.0);
def t3 = (3, "four");

func (t1);
func (_, "three", _) (t2); 
func (_, _, 5.0) (t3);  // func (t3, 5.0)と書きたいところ

// 名前付きパラメータで実験
func (y="five", z=6.0, x=4);
/*
func (y="four"); // x, zがないのでエラー
func (y="four", z=_, x=_);  // Partial applicationには対応してない模様
func (y="four") (t2); // このように呼べたら良かったんだけど・・・
 */

/* 結果
1,two,3
2,three,4
3,four,5
4,five,6
 */

'_'を書くのが面倒になりますね。引数を省略したら自動的に関数を返してくれれば便利な気もしますが、他の言語機能の事も考えると、それは無しかな。関数のオーバーロードとデフォルト引数が絡んでくると理解不能になりそ。(^^;