Haskellでは、タイプがa
の3つの関数を定義し、任意のデータ型a
に対して3回繰り返された要素のリストを返します。Free PascalにはHaskellのような型変数がありますか?
thrice :: a -> [a]
thrice x = [x, x, x]
フリーパスカルは型変数を許可しますか?そうでない場合は、Free Pascalでこれを行う別の方法がありますか?
Haskellでは、タイプがa
の3つの関数を定義し、任意のデータ型a
に対して3回繰り返された要素のリストを返します。Free PascalにはHaskellのような型変数がありますか?
thrice :: a -> [a]
thrice x = [x, x, x]
フリーパスカルは型変数を許可しますか?そうでない場合は、Free Pascalでこれを行う別の方法がありますか?
パスカルを知らないハスケル人として、これは同じように見えます。拡大できなくて申し訳ありません。
残念ながらFreePascalとは、現在唯一のジェネリッククラスではなく、汎用的な機能を持っています。あなたの目標はまだ少しでも厄介なものですが、達成することができます。あなたの操作をカプセル化する新しいクラスを定義する必要があります:あなたはに必要な、今
unit Thrice;
interface
type
generic ThriceCalculator<A> = class
public
class function Calculate(x: A): array of A;
// We define it as a class function to avoid having to create an object when
// using Calculate. Similar to C++'s static member functions.
end;
implementation
function ThriceCalculator.Calculate(x: A): array of A;
begin
SetLength(Result, 3);
Result[0]:= x;
Result[1]:= x;
Result[2]:= x;
end;
end.
、残念ながらあなたが任意の特定のタイプで、このクラスを使用する場合に特化:
のみtype
IntegerThrice = specialize ThriceCalculator<Integer>;
を
このように、Pascalはまだジェネリックプログラミングの道ではありません。
フリーのPascalは、そのジェネリック(C++テンプレートに匹敵する)に型変数を持っています。 –
Free Pascalの組み込みジェネリック・タイプはどのように使用しますか? Googleはフォーラムスレッドのみを返します。 – mcandre
Wikiページのモナディックの答えを参照してください。あるいは、コンパイラの[documentation](http://www.freepascal.org/docs.var)、または実際には[関連する言語リファレンスの章](http://www.freepascal.org)を参照してください。 /docs-html/ref/refch8.html)。 –