問題タブ [polyml]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
function - PolyML の関数と型
[...] for everyに評価される関数
tofun : int -> ('a -> 'a)
などのペア。fromfun : ('a -> 'a) -> int
(fromfun o tofun) n
n
n : int
これが実際に何を求めているのか、私に説明できる人はいますか? これに対する実際の解決策よりも、その説明を探しています。
sml - 特定の型に多相関数を適用する高階関数を定義する方法
私が定義する場合
それから自然id
にタイプを持っています'a -> 'a
もちろん、は にid 0
評価されますが0
、これは完全に理にかなっています。
これは完全に理にかなっているので、関数でカプセル化できるはずです。
applyToZero
タイプが('a -> 'a) -> int
あり、applyToZero id
評価されることを願って0
しかし、applyToZero
上記のように定義しようとすると、SML/NJ は次のような奇妙なエラー メッセージを表示します。
これは、コンパイラ自体のバグのように見えます。奇妙ですが、可能です。
しかし、PolyML も気に入りません (ただし、エラー メッセージはそれほど奇妙ではありません)。
以下は機能します:
推論されたタイプで('a -> 'a) -> int
。これは、このタイプの高階関数を作成することが不可能ではないことを示しています。
SML が の私の定義を受け入れないのはなぜapplyToZero
ですか? タイプが になるように定義できる回避策はあります('a -> 'a) -> int
か?
動機:この質問のパズルを解こうとする試みでtofun
、タイプの関数と、すべての整数に対して望ましいプロパティを持つint -> 'a -> 'a
別の関数を定義することができました。ただし、私の作業の推定タイプは. SML がそれを受け入れるように型注釈を追加しようとする私の試みはすべて失敗しました。その質問をした人がまだそのパズルに取り組んでいる可能性があるため、 の定義を示したくありませんが、 の定義はまったく同じエラーメッセージを引き起こします。fromfun
fromfun (tofun n) = n
n
fromfun
('int -> 'int) -> 'int)
('a -> 'a) -> int
fromfun
applyToZero
functional-programming - タイプの関数: ('a -> ('b -> 'c)) -> ('a -> 'b) -> ('a -> 'c) (標準 ML)
プログラミング言語の試験の復習をしているときに、標準 ML セクションの型推論の問題がいくつかあります。それらのほとんどは、頭の中で型推論を行うことで解決できます。私はそれがかなり得意ですが、1 つの問題があります。私を困惑させます。
次のタイプの関数を作成する必要があります。
('a -> ('b -> 'c)) -> ('a -> 'b) -> ('a -> 'c)
したがって、私の頭の中には、f と g という 2 つの引数を持つ関数が必要です。どちらも引数 x を取りますが、引数 x をこの関数に追加することはできません。なぜなら、この関数は 2 つの引数しかとらないためです。そのため、関数をパイプライン化するために、o 演算子を使用してこの関数を作成する必要があります。
したがって、f は引数を取り、関数を返します g は引数を取り、値を返します。次に、関数全体が値を取り、値を返します。
これらのルールを暗示するために、o 演算子のみを使用して f と g を適用する方法がわかりません。
どんな助けでも大歓迎です:)ありがとう、シアラン
constants - SML では、パターンに実定数を使用できないのはなぜですか?
このコードは受け入れられません。
どうしてこれなの?