私は、引数としてリストを取る関数 'check()'を書く必要がある学校の仕事があります。このリストには3つの要素があります。リストの最初の要素は演算子で、他の2つの要素はデータ型でなければなりません。関数呼び出しの例は、次のようになります。スキーム - カスタムデータ型?
(check '(+ int int))
ここでは、LITERALLYと言うべきです。関連する数字はありません。この関数は、操作で使用するデータ型の種類に応じて、出力される正しいデータ型を戻す必要があります。例:
(check '(+ int int))
はintを返す必要があります。
また、言う: 「あなたのプログラムは
'+'、演算子を認識すべきである ' - '、 '*'、 '/'、 '商'、 '<'、 '>'、 '='、 「と、」または」 とデータ型: 『INT』、 『ブール』と 『本当の』
テスト実行の例は次のようになります。
> (check '(+ int int))
int
> (check '(* int bool))
The operator '*' does not accept bools!
> (check '(= (< (+ int int) (quotient int int)) (> int int)))
bool
> (check '(* int (+ real int)))
The operator '+' must have operands of the same numerical type!
をこのタスクはで連れて行ってくれました私がSchemeで本当にカスタムデータ型を作ったことがないのは驚きです。一般的には魅力的です)。私は現在どこから始めるべきか、何をすべきか分かりません! int、bool、realを定義する必要がありますか?演算子を定義する必要はありますか?もしそうなら...どう?誰か助けてくれますか?私にどのようなプロセスを開始するか、どのようなプロセスを見せるかを教えてください。
質問に一貫性がありません。一例では、 '( - int real)'は 'real'を返しますが、もう一つの例で'(+ real int) 'は' real'を返す代わりにエラーを投げます。これはおそらく偽です。 –
@ ChrisJester-Youngああ、気付かなかった。私の悪い。テスト実行出力は正しいものです。私の投稿を編集してください。 – Schytheron