2009-07-07 9 views
0
で特定のタイプの結果

イムを確保:型の要素を返す関数を作成しようとしている「ポイント」SML

type point = {x : int, y : int}; 
fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2))); 

をしかし、結果はでなければならないというのが私の意図を理解してSMLNJいないようです同様のタイプ「ポイント」:タイプの署名を印刷するときにそれは私のSML時代からかなり時間があったが、自動的に定義された型を解決できない型システムをAFAIRだ

use "test1.sml"; 
[opening test1.sml] 
type point = {x:int, y:int} 
val pointadd = fn : point * point -> int * int 

答えて

2

pointはレコード型ですが、あなたの代わりにタプルを返している:あなたはこのような何かを試みることができます。

fun pointadd (p1: point, p2: point) = 
    { x = #x p1 + #x p2, 
     y = #y p1 + #y p2 }; 

あなたはタイプが立派にするために、戻り値の型に型ガードを追加することができますが、それは同等です:このような何かについてどのように

fun pointadd (p1: point, p2: point) : point = 
    { x = #x p1 + #x p2, 
     y = #y p1 + #y p2 }; 
+0

Spot on!問題が解決しました:) – loldrup

+0

@loldrup:問題が解決したら、投票カウンタの下にある緑色のチェックマークをクリックして**この回答を受け入れるべきです。 – ephemient

0

fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2))): point 
+0

構文エラーを返します。 - "test1.sml"を使用します。 [opening test1.sml] タイプポイント= {x:int、y:int} test1.sml:3.39-3.88エラー:式が制約と一致しません[tycon mismatch] 式:int * int constraint:point式中 : ((FN =>)のP1 +(FN =>)P2、 (FN =>)のP1 +(FN =>)P2):点 キャッチされない例外エラー が発生しました:../compiler/TopLevel/interact/evalloop.sml:66.19-66.27 ../compiler/TopLevel/interact/evalloop.sml:44.55 ../compiler/TopLevel/interact/evalloop.sml:296.17-296.20 – loldrup

関連する問題