سؤال

ولقد قرأت دعاية مغالى فيها على StrangeLights ، لقد قرأت مرور من الخبراء F # (صفحة 119)، ولكن لا استطيع ان ارى كيفية تطبيقها على قانون بلدي:

لبلدي التجارب، أريد أن تحقق المساواة بين العوامات، مع شيء من التسامح. أنا تحويل كل شيء إلى وحدات القياس، ولكن أريد أن أكون قادرة على أن تكون 'عام':

let toleq (e:float<_>) a b = (abs ( a - b ) ) < e

وبعد ذلك يمكنني أن استخدام هذا للتحقق المساواة على 'أنواع' مختلفة من تعويم، أو الكاري هو أن تجعل من عرف واحد:

toleqm = toleq 1.0e-10<m>

ولكن أحصل على الرسالة التالية:

Type inference has inferred the signature
    val toleq : float<'u> -> float<'u> -> float<'u> -> bool
Either define 'toleq' as a simple data term, make it a function, or add a 
    type constraint to instantiate the type parameters.

وأنا لا أرى كيف يمكنني أن أفعل أكثر من ذلك لجعلها وظيفة - لا استطيع ان ارى أية معلمات الضمنية.

وما الأمر؟

هل كانت مفيدة؟

المحلول

حسنا، أنا عابث حول قليلا وجدت الحل، في اليأس، ولكن لست متأكدا من أن أفهم لماذا ...

let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e

وهتاف اشمئزاز، انها تقريبا قبيحة مثل الإعلانات العامة في C #.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top