2016-11-13 6 views
2

オプションエラー」と機能狂気私を駆動する:最初の引数の各タプルに対してOCamlの:私はこの単純な機能を持っている

myfunction : (int * int list) list -> int -> int 

:それは、このタイプの関数であるべき

第2引数がタプルの最初の要素と一致すると、関数はタプル内のリストの最後の要素を返します。

一致しない場合は、-1が返されます。

let rec myfunction alist anum = 
    let last_e l = 
    let len = List.length l in 
    List.nth l (len - 1) in 
    match alist with 
    | [] -> -1 
    | (n , ln) :: q -> if n = anum then last_e ln 
    else myfunction q anum 

しかし、私の機能は動作しませんし、私はutopにこのエラーメッセージを持っている:「オプション」タイプはどこから来るか私にはわからない

Error: This expression has type 'a option                                           but an expression was expected of type int 

+0

コードから正しい機能を分離したことは確かですか?例えば'myfunction [(1、[1]); (2、[2])] 2は私に「2」(エラーなし)を与えます。 –

+0

@barti_ddu、これは、コアがロードされたutopでこれをテストしたので正常です。私が受け入れた答えを見てください。 – cedlemo

答えて

3

これあなたには、いくつかのOCamlのトップレベル(例えばutop)を使用していると、あなたの.ocamlinitファイル

#require "core.top" ;; 
open Core.Std ;; 

これはList.nthは型を持つコアライブラリ、有効にこれらの行を持っている場合に発生することができます

μ> List.nth;; 
- : 'a list -> int -> 'a option = <fun> 

標準OCamlのList.nth : 'a list -> int -> 'aの代わりに。

μ> #use "myfunction.ml";; 

をあなたが質問で引用同じエラーを取得する:あなたはトップレベルを起動し、言うので

、。

ところで、Coreを使い続けたい場合は、List.lastという機能があります。

関連する問題