我正在创建一个函数
(define (run program-string . arguments)
(if (string? program-string)
(value-of (create-ast program-string) (empty-env))
(raise (string-append "expected a program as string, got: " (~a program-string)))
)
)
其中“arguments”将是一个参数字符串或一个表示程序参数的空列表 '()。“参数”中的每个参数将按位置绑定到程序字符串中的变量,即 argN,其中 N 是特定参数的位置(从 0 开始)。
Eg.
(run "move((0 0) arg0 arg1 arg2 arg3 arg4 arg5 arg6)"
"up(3)"
"right(5)"
"right(4)"
"down(2)"
"up(6)"
"right(2)"
"right(3)"
)
Output: (coordinate-value '(point xcord ycord)) //
因此,假设所有这些函数和值都已用我的语言定义,并且 xcord 和 ycord 是最终移动后的实际坐标。鉴于该输入,我想将“up(3)”绑定到 (0 0),将“right(5)”绑定到 arg0.... 等,给定任意数量的 argN 和每个对应的输入数量参数。
run 函数基本上需要为每个 arg 分配其对应的参数并运行最终的字符串。