LISP:从用户读取数字并与数组索引进行比较

LISP: read number from user and commpare with array index

大家好,我是函数式编程的新手,我真的不清楚有人可以帮助我吗? 我的问题只是为了了解使用函数式编程语言编写的哲学,例如我如何用 Lisp 语言编写程序来读取用户输入并比较用户输入和数组索引? 关于我的问题的另一部分,我们如何在 lisp 中指定数组的索引? 例如,我是用像 C# 这样的数字编程语言编写这个程序的,但我如何在 LISP 中完成它?

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());
                }
            }
        }
    }

Common 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# 示例的“形状”。

(defun main ()
  (loop
     (fresh-line)
     (princ "Enter a number:")
     (finish-output)
     (let* ((*read-eval* nil)
            (number (read)))
       (format t "~&~r" (1+ number)))))