gpt4 book ai didi

scheme - 方案功能(DrRacket)

转载 作者:行者123 更新时间:2023-12-03 08:08:04 26 4
gpt4 key购买 nike

因此,我正在尝试在scheme中编写以下函数,并使其能够在DrRacket上运行。问题如下,

make5 -接受两个整数,并返回一个5位数的整数,该整数由第一个输入的最右3位和第二个输入的最左2位构成。例如,(make5 561432 254)将返回43225。

任何一个输入数字上的负号都应忽略-即(make5 561432 -254)也将返回43225。

如果第一个数字少于三位数或后三位数以零开头,和/或第二个数字少于两位数,则您的
函数应返回-2。注意:您可能需要定义一些辅助功能。

到目前为止,这是我已经能够编写的功能。

(define (make5 x y)
(cond ((< (length x) 3) -2)
((< (length y) 2) -2)
(((modulo (abs(x)) 1000) 0) -2)
(((modulo (abs(y)) 1000) 0) -2)
(else (append (list-tail x 3) (cons (first(y)second(y)))))))

我遇到了错误...

应用:不是程序;
期望可以应用于参数的过程

任何意见,将不胜感激。我是新手,仍然在尝试掌握所有内容。

最佳答案

不要将参数放在括号内-(abs(x))的意思是“调用过程x并将结果传递给abs(cons (first(y)second(y))的意思是“cons这四件事:first的值;调用y过程的结果; second的值;以及调用y过程的结果”。
(您在某些地方正确调用了过程。请遵循相同的模式。)

您还缺少几个条件下的比较; (= (modulo (abs x) 1000) 0)

输入不是列表,而是整数,因此您不能将lengthfirst或任何此类内容应用于它们。
结果应该是一个整数,而不是一个列表,因此您不能使用appendcons构造它,而只能使用算术。

这些关于整数的事实应该使您入门:

  • 如果数字小于10000,则数字少于五位。
  • 非负数n的后四位数字是(modulo n 10000)
  • 如果x为12且y为34,则x * 100 + y为1234。
  • 要获取整数中最左边的三个数字,可以重复除以10,直到数字小于1000。

  • 还要注意,第二个数字在其数字上只有一个条件,而第一个数字有两个条件,而且关于定义辅助功能的注释并未留在那里,这对您没有辅助功能是一个挑战。

    例如,如果您有辅助功能
  • (left-digits n x),它产生n
  • 的最左侧 x数字
  • (right-digits n x),它产生n
  • 的最右边 x数字

    您可以写(描述使用单词“if”和“or”可能也不是巧合):
    (define (make5 x y)
    (if (or ( ... ))
    -2
    (+ (* 100 (right-digits 3 x)) (left-digits 2 y))))

    由于您想忽略数字的符号,因此使用 abs可以一开始就很方便地处理 let:
    (define (make5 signed-x signed-y)
    (let ((x (abs signed-x))
    (y (abs signed-y)))
    (if (or ( ... ))
    -2
    (+ (* 100 (right-digits 3 x)) (left-digits 2 y)))))

    现在剩下的“全部”是填写条件并编写两个数字提取函数。

    关于scheme - 方案功能(DrRacket),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47218016/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com