2015-10-18 6 views
0

Будучи новым для SML, используя SML NJ I признал это поведение функции:Поведение функции с анонимной функции в ее

- fun test g= fn x=>x; 
val test : 'a -> 'b -> 'b = _fn 
- test 1 2; 
val it : int = 2 
- test 1; 
val it : '1 -> '1 = _fn 

это так, что интерпретатор использует unit в качестве типа данных для входного параметра г , если для вызова функции нет значения? Если да, то почему это происходит с g, а не с входным параметром для анонимной функции?

+0

Я не понимаю, о чем вы просите. «Это так, что интерпретатор использует единицу в качестве типа данных для входного параметра g». Это неверно, он использует тип '' a'. Кроме того, при выполнении 'test 1' вы нарушаете ограничение [значение] (http://mlton.org/ValueRestriction). – Matt

+1

Этот вопрос очень неясен. Результатом 'test 1' является функция. Вы можете применить его: 'it 2;' приведет к 'val it: int = 2'. – molbdnilo

+0

О, хорошо спасибо @molbdnilo. Поскольку я очень новичок в SML, я этого не видел. Это просто объясняет мой вопрос. –

ответ

0

Согласно @molbdnilo test 1; свяжет только значение функционального теста (fn x=>x) с номером it. Таким образом, 1 при первом вызове присваивается g. Вызов it с некоторым параметром выполнит часть fn x=>x.

Смежные вопросы