gpt4 book ai didi

lisp - 在 Common Lisp 中将拼写错误的文本转换为整数?

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:15 24 4
gpt4 key购买 nike

总的来说,我对 Common Lisp 和 Lisp 完全陌生。我有一个使用 Common Lisp 编写的任务,但我什至不知道如何开始。我的程序将采用从 1 到 9 的字符串格式的数字,它们将有一个字符拼写错误,但长度正确;例如:

too -> 2
threa -> 3

等等。当给出错误的文本时,我需要打印整数,我真的不知道如何开始。任何帮助将不胜感激。

提前致谢。

最佳答案

听起来很有趣 :-)

让我们按照通常的 Lisp 方式来做——通过发展语言来解决问题。

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

这是字典:

(defparameter *dictionary*
(loop for i from 1 to 9 collect (cons (format nil "~R" i) i)))

两个字符串匹配意味着什么?

(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

最后在字典中查找字符串:

(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

附言。我使用了相当先进的 loop有目的的设施:如果这是家庭作业,您可能不允许使用它,因此您将不得不使用更简单的习惯用法重写我的代码。

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

关于lisp - 在 Common Lisp 中将拼写错误的文本转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43262736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com