OCaml

2016-04-14 22 views
1

'da bir tür döndürme İki liste eklemeyi denedim, ancak türlerini kullanmayı düşündüm.OCaml

type x = int list; 

let add (elem1 : int) (elem2 :int) = 
    elem1 + elem2;; 

let add2Lists (a : x) (b : x) = 
    List.map2 add a b;; 

Şaşırtıcı bir şekilde, add2Lists döndürür: x -> x -> int list. Bir int listesinin aslında tür ile aynı olduğunu biliyorum, ancak add2Lists'in x türünün değerlerini tam anlamıyla nasıl değerlendiririm? tiplerine bağlı olabilir belirli türde (onlar (ile değerlendirmek, aslında) dönmek işlevleri türlerini dönmek yok, Başvuru için değerleri

let add2Lists (a : x) (b : x) : x = 
    List.map2 add a b;; 

:

cevap

2

bir tür sınırlaması ekleyin argümanlar). Yani, sorunuzu "add2Lists türünü x türünün değerlerini nasıl değerlendiririm?" Satırlarında bir şey söylemiş olmalıydı. Veya daha da kesin olarak, "add2Lists bildirilen sonuç türünü tam anlamıyla x nasıl yapabilirim?"

+0

Teşekkürler! Üzgünüm, dile yeni. ": X" bölümünün ne anlama geldiğini açıklayabilir misiniz? Bu, yalnızca x türünde bir değer döndürdüğümü söylüyor mu? ya da arkasında daha büyük bir anlam var. – halapgos1

+0

': x' sözdizimi birkaç farklı yapıda görünür, fakat 'temel' anlamı her zaman ''' '' '' '' '' türünün soluna ne olduğunu varsayar. Tek soru, soldaki şeydir ... argümanlar söz konusu olduğunda, bu “a”, sonra “b” dir. Parantezler bunu açıklığa kavuşturur. Bir 'let' bildirgesinde veya ifadesinde son': x' durumunda, bir fonksiyonun (argümanlar ile) oluşturulup oluşturulmadığına bağlıdır. Eğer öyleyse, fonksiyonun sonuç tipine uygulanır. Eğer değilse, modele uygulanır (genellikle sadece tek bir değişken). – antron

+0

Yani, 'foo: int = ...' foo'nun 'int' türünde olması gerektiği anlamına gelir, ancak' fx: int = ... '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' anlamına gelir. int'. Bu biraz kafa karıştırıcı ve sözdizimi benim favori parçası değil. – antron