在公共Lisp中将拼写错误的文本转换为整数?

在公共Lisp中将拼写错误的文本转换为整数?,lisp,common-lisp,Lisp,Common Lisp,我对普通的Lisp和Lisp是完全陌生的。我有一个任务要用CommonLisp编写,甚至不知道如何开始。我的程序将采取字符串格式的数字从1到9,他们将有一个字符拼写错误,但正确的长度;e、 g: too -> 2 threa -> 3 等等。我需要打印的整数时,给出了错误的文本,我真的不知道如何开始。任何帮助都将不胜感激 提前谢谢。听起来很有趣:-) 让我们用通常的Lisp方式来解决这个问题——通过增加语言来解决这个问题 问题是:将字符串与字典匹配,这样最多允许一个拼写错误 这是字

我对普通的Lisp和Lisp是完全陌生的。我有一个任务要用CommonLisp编写,甚至不知道如何开始。我的程序将采取字符串格式的数字从1到9,他们将有一个字符拼写错误,但正确的长度;e、 g:

too -> 2
threa -> 3
等等。我需要打印的整数时,给出了错误的文本,我真的不知道如何开始。任何帮助都将不胜感激

提前谢谢。

听起来很有趣:-)

让我们用通常的Lisp方式来解决这个问题——通过增加语言来解决这个问题

问题是:将字符串与字典匹配,这样最多允许一个拼写错误

这是字典:

(defparameter *dictionary*
  (loop for i from 1 to 9 collect (cons (format nil "~R" i) i)))
(defun parse-string (s)
  (loop for (name . number) in *dictionary*
    if (matchp name s) return number))
(parse-string "one")
==> NIL  ; not found
(parse-string "onn")
==> 1
(parse-string "too")
==> 2
(parse-string "thre3")
==> 3
(parse-string "foor")
==> 4
(parse-string "fivv")
==> 5
(parse-string "sis")
==> 6
(parse-string "sever")
==> 7
(parse-string "aight")
==> 8
(parse-string "nane")
==> 9
两个字符串匹配意味着什么

(defun diff (s1 s2)
  "Count the number of differences in the shortest common start."
  (loop for c1 across s1
    for c2 across s2
    sum (if (char= c1 c2) 0 1)))
(diff "abc" "abcde")
==> 0
(diff "abc" "aba")
==> 1
现在匹配:

(defun matchp (s1 s2)
  "Two strings match iff they have the same length and 1 different character."
  (and (= (length s1)
          (length s2))
       (= 1 (diff s1 s2))))
(matchp "a" "b")
==> T
(matchp "too" "two")
==> T
(matchp "one" "one")
==> NIL
最后,在字典中查找字符串:

(defparameter *dictionary*
  (loop for i from 1 to 9 collect (cons (format nil "~R" i) i)))
(defun parse-string (s)
  (loop for (name . number) in *dictionary*
    if (matchp name s) return number))
(parse-string "one")
==> NIL  ; not found
(parse-string "onn")
==> 1
(parse-string "too")
==> 2
(parse-string "thre3")
==> 3
(parse-string "foor")
==> 4
(parse-string "fivv")
==> 5
(parse-string "sis")
==> 6
(parse-string "sever")
==> 7
(parse-string "aight")
==> 8
(parse-string "nane")
==> 9
另外,我故意使用了相当先进的工具:如果这是家庭作业,你可能不被允许使用它,所以你必须用更简单的习惯用法重写我的代码


PPS。你可能应该读一本书,两者都很好。

很好的入门书,免费PDF下载:我稍后会看这本书。谢谢你的邀请reccommendations@plank223我没有犯任何错误。你犯了什么错误?非常感谢大家。这救了我。非常感谢sds和Sylvester,原来问题不在于代码,而是另一个问题,谢谢。