我有一个学校任务,我必须写一个功能' check()'将列表作为参数。此列表包含3个元素。列表第一个元素应该是运算符,其他2个元素应该是数据类型。函数调用的示例如下所示:
(check '(+ int int))
它应该在哪里说Int。不应该涉及任何数字。然后,此函数应返回正确的输出数据类型,具体取决于您在操作中使用的数据类型。例如:
(check '(+ int int))
应该返回int。
它还说:
"您的程序应该识别操作员
' +',' - ',' *',' /','商',& #39;<&#;&#;;'>',' =','和,'或'
和数据类型:
' 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中制作任何自定义数据类型。没有人知道这是可能的。我是Scheme的新手(以及一般的编程)。我目前不知道从哪里开始或做什么!我需要定义int,bool和real吗?我需要定义运算符吗?如果是这样......怎么样?有谁能够帮我?告诉我从哪里开始或过程应该是什么样的......
答案 0 :(得分:0)
信不信由你,这个问题与自定义数据类型无关;它只是一个框架设备,让学生思考递归。
从根本上说,递归就是将问题分解成越来越小的碎片,直到你剩下最基本的碎片。对于此类型检查功能,您遇到类似@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
// your code here ...
Contact c = contactList.get(contactHolder.getAdapterPosition());
bitmap = Bitmap.createScaledBitmap(bitmap,(int)(bitmap.getWidth()*0.8), (int)(bitmap.getHeight()*0.8), true);
contactHolder.thumbnail.setImageBitmap(bitmap);
Log.e("ProfileImage", c.getmProfileImage());
SaveImages(bitmap, c.getmProfileImage());
}
的输入,必须将其缩减为(= (< (+ int int) (quotient int int)) (> int int))
之类的输出。
将其分解的方法是将上面的大输入视为等同于bool
,其中A为(= A B)
,B为(< (+ int int) (quotient int int))
。
然后将A分解为(> int int)
,其中C为(< C D)
,D为(+ int int)
。然后,您应用问题中给出的规则。特别是,以下规则适用:
(quotient int int)
⇒(+ int int)
int
⇒(quotient int int)
int
⇒(< C D)
⇒(< int int)
bool
⇒(> int int)
bool
⇒(= A B)
⇒(= bool bool)
在获得最基本的内容(bool
,int
,real
)之前,请参阅减少问题的步骤。简而言之就是递归。
我希望这有助于您开始解决问题。