Io 如何在Scheme中实现(读取)函数?

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))

我想在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 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)
,您可以使用
应用
将所有变量作为参数传递给函数。是实现还是使用?