Functional programming LISP:从用户处读取数字并与数组索引进行比较
大家好,我是函数式编程新手,真的不清楚有人能帮我吗? 我的问题只是为了了解函数式编程语言的编写原理,例如,我如何用Lisp语言编写程序来读取用户输入,并比较用户输入和数组索引? 关于我的问题的另一部分,我们如何在lisp中指定数组的索引? 例如,我是用C#之类的数字编程语言编写这个程序的,但我怎么能用LISP编写呢Functional programming LISP:从用户处读取数字并与数组索引进行比较,functional-programming,lisp,common-lisp,Functional Programming,Lisp,Common Lisp,大家好,我是函数式编程新手,真的不清楚有人能帮我吗? 我的问题只是为了了解函数式编程语言的编写原理,例如,我如何用Lisp语言编写程序来读取用户输入,并比较用户输入和数组索引? 关于我的问题的另一部分,我们如何在lisp中指定数组的索引? 例如,我是用C#之类的数字编程语言编写这个程序的,但我怎么能用LISP编写呢 static void Main(string[] args) { while (true) { Console.Wr
static void Main(string[] args)
{
while (true)
{
Console.Write("Enter the number:");
string name = Console.ReadLine();
string[] numbers = {"0","1", "2", "3", "4", "5"};
string[] words = {"one", "two", "three", "four", "five" };
for (int i = 0; i < numbers.Length; i++)
{
if (name == numbers[i].ToString())
{
Console.WriteLine(words[i].ToString());
}
}
}
}
static void Main(字符串[]args)
{
while(true)
{
控制台。写入(“输入号码:”);
字符串名称=Console.ReadLine();
字符串[]数字={“0”、“1”、“2”、“3”、“4”、“5”};
字符串[]单词={“一”、“二”、“三”、“四”、“五”};
for(int i=0;i
通用Lisp是一种多范式,而不是纯粹的功能。真的没有理由从C#更改代码算法。如果您想以程序样式编写,可以继续这样做
(defun main (&rest args)
(declare (ignore args))
(loop
(princ "Enter the number:")
(finish-output)
(let ((name (read-line))
(numbers #("0" "1" "2" "3" "4" "5"))
(words #("one" "two" "three" "four" "five")))
(loop for i from 0 upto (length numbers)
when (equal name (elt numbers i))
do (print (elt words i))))))
不幸的是,您的示例在C#中无法正常工作,因此很难猜测您希望它在Lisp中做什么。下面是一个通用版本,它将对任何数字(不仅仅是0-4)执行相同的操作,但仍然遵循C#示例的“形状”
Common Lisp不是函数式语言……但是,C#也不是数字语言……更重要的是,到目前为止,您在CL中尝试了什么?您遇到了什么问题?如果您知道这是一个您想要读取的数字,您可以使用
parse integer
(标准中)或parse number
(库)。这比使用read
要好得多,因为您必须防止恶意输入。@BRP从第一部分开始,它不能很好地工作,因为它打印数组的所有索引我只想打印索引与用户输入相等,第二部分的意思是“(格式t”~&~r)(1+数字)“当我尝试只打印数字而不添加一个数字时,为什么它不起作用!@Svante是的,但这遵循C#代码的形状,并接受理性等。我可能会使用read line,but@Ega它们都应该产生与原始程序相同的输出,只有第二个程序处理所有数字,而不仅仅是0-4。您可以查找格式通过拼出波浪号进行编码:“CLHS格式波浪号R”例如
(defun main ()
(loop
(fresh-line)
(princ "Enter a number:")
(finish-output)
(let* ((*read-eval* nil)
(number (read)))
(format t "~&~r" (1+ number)))))