Io 如何在Scheme中实现(读取)函数?
我想在scheme中实现一个用户输入(read),所以有三个变量(xyn)。我试图实现它,但它只需要第一个数字,例如,如果我要输入(10 5 2),它将只需要(10)。所以我想知道如何实现Read函数,它允许我从用户那里获取3个整数,并将它们设置为(xyn)变量,这样我就可以运行下面的除法函数,基本上是x除以yn的次数Io 如何在Scheme中实现(读取)函数?,io,scheme,Io,Scheme,我想在scheme中实现一个用户输入(read),所以有三个变量(xyn)。我试图实现它,但它只需要第一个数字,例如,如果我要输入(10 5 2),它将只需要(10)。所以我想知道如何实现Read函数,它允许我从用户那里获取3个整数,并将它们设置为(xyn)变量,这样我就可以运行下面的除法函数,基本上是x除以yn的次数 (display "Enter 10 5 2 as test case.") (newline) (define ReadForDivide (Read))
(display "Enter 10 5 2 as test case.")
(newline)
(define ReadForDivide (Read))
(display ReadForDivide)
;10
(define (nDivide x y n)
(if (= n 0)
x
(nDivide (Divide x y) y (- n 1))))
您可以实现一个简单的
prompt
过程,该过程将消息和sentinel值作为输入,并递归收集用户输入,直到输入sentinel值。当在输入中遇到sentinel值时,将返回输入值列表:
(define (prompt msg sentinel)
(display sentinel) (display " to finish") (newline)
(display msg)
(let ((user-input (read)))
(if (equal? user-input sentinel)
'()
(cons user-input (prompt msg sentinel)))))
您可以使用相同的想法编写一个更简单的过程,该过程接收一条消息和所需输入数量的计数,并返回这些输入的列表。也许第一个过程应该调用prompt sentinel
,第二个过程应该调用prompt count
。我将把它作为手术的练习
样本交互:
>(应用+(提示“输入数字:”'q))
q完成
输入一个数字:1
q完成
输入一个数字:2
q完成
输入一个数字:3
q完成
输入一个数字:q
6.
请注意,作为sentinel值传递的符号(或任何对象)必须由用户无引号输入:
>(提示“输入一个数字:”'oops)
哎呀,要结束了
输入一个数字:1
哎呀,要结束了
输入一个数字:2
哎呀,要结束了
输入一个数字:3
哎呀,要结束了
输入一个数字:“哎呀
哎呀,要结束了
输入一个数字:oops
(1、2、3’oops)
显示如何使用(读取)
?调用(读取)
3次,每个变量一次。如果用户输入(10 5 2)
,您可以使用应用
将所有变量作为参数传递给函数。是实现还是使用?