gpt4 book ai didi

emacs - If 语句/字符串比较

转载 作者:行者123 更新时间:2023-12-01 10:04:21 25 4
gpt4 key购买 nike

我是 elisp 的新手,正在尝试使用 if 语句编写一个简单的程序。

要点是读一年的学校并返回 1, 2, 3, 4,或 0 用于字符串 "freshman""sophomore""junior"分别为“senior”(不匹配时默认为0,我的代码如下:

(defun yearCode(name)
(if ( = name "freshman") 1
(if ( = name "sophomore") 2
(if ( = name "junior") 3
(if ( = name "senior") 4
(0))))))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; main function ;;;
;;; input: year ;;;
;;; output: code corresponding to year ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun main (year)
(interactive "sEnter your academic year: ") ; read year
(message "%d" (yearCode year))) ; display its code

;;; Tests...
(main "junior")
(yearCode "junior")

老实说,我对 elisp 一无所知,所以即使编译第一部分我也遇到了麻烦。谁能帮我正确构造一个 if 语句?

编辑:我在错误的缓冲区中进行测试 -_- 代码使用 if 语句工作。

最佳答案

当你在 ruby​​ 中有 if..elseif..elseif..else 时,你在 emacs lisp 中使用 cond:

(defun yearCode (name)
(cond
((string= name "freshman") 1)
((string= name "sophomore") 2)
((string= name "junior") 3)
((string= name "senior") 4)))

然而,我不会这样写。

(defun yearCode (name)
(cdr (assoc name
'(("freshman" . 1)
("sophomore" . 2)
("junior" . 3)
("senior" . 4)))))

等式有很多种,=是严格意义上的数字(或标记)。 string= 用于字符串和字符串指示符eq 用于对象标识,equal 是一种深度相等元素(这就是为什么它适用于字符串,但对于字符串与非字符串比较它只会返回 false,从不检测错误)。后一个 equalassoc 使用。

关于emacs - If 语句/字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14740155/

25 4 0
文章推荐: java - 如何将 'creating of a new instance of a fragment' 保存在变量中?
文章推荐: java - 服务器响应设置 boolean 值 true/false
文章推荐: string - 如何在 tcl 中执行子字符串提取和替换
文章推荐: java - Dozer 从 Set 映射到 List