0

多項式が関数として次のように表されると考える場合: type P= int*(int->int) ここで、最初の int は多項式の次数であり、(int->int) は係数を取り、インデックスを付けて返す関数です。 .

リストを指定すると、そのタイプの多項式が得られる関数を作成する必要があります。たとえば、 form([1]) は (0,fn 0=>1)) を返しますが、問題は

form([1,5]) は (1,fn 0=>1|1=>​​5)) を与えます

fn は再帰的ではないため、 fn 0=>1|1=>​​5 の部分について非常に混乱しています。リストの長さからポリゴンの順序を見つけることができます。x::l を使用してそのリスト内の各要素にアクセスできますが、アクセスごとにこの関数 (fn 0=>1|1=>​​5) を構築するにはどうすればよいですか?要素の。明確な答えは望んでいませんが、助けが必要です!

4

1 に答える 1

0

構造体のメソッドを使用してList、デカルト関数のカリー化されたバージョンを作成することで実装できますList.nth

fun form nil = raise Empty
  | form xs  = (List.length xs - 1, fn i => List.nth (xs, i))

nthの機能を備えた関数を自分で実装したい場合は、次のようになります。

fun form xs = 
  let
    fun nth nil     _ = raise Subscript
      | nth (y::_)  0 = y
      | nth (_::yr) i = nth yr (i - 1)
  in
    (List.length xs - 1, nth xs)
  end
于 2013-10-16T10:09:25.653 に答える