我试图将一个简单的替换方法作为一个新的Lisp用户,但无法理解为什么这不能正常工作.
;replace element e1 with element e2 in a list L
(defun my-replace (e1 e2 L)
(cond
;if the first of L is e1, cons e2 & rest L
((equal (car L) (e1)) (cons (e2) (my-replace (e1 e2 (cdr L)))))
;else cons e1 & rest L
(t (cons (e1) (my-replace (e1 e2 (cdr L)))))))
Run Code Online (Sandbox Code Playgroud) 我是ML的新手并且一直在尝试简单的功能,但我在尝试使用实数来处理函数时遇到了麻烦.例如,这个反向功能....
fun reverse (nil) = nil
| reverse (x::xs) = if xs = nil then [x]
else (reverse xs) @ [x];
Run Code Online (Sandbox Code Playgroud)
我得到了整数和字符串的propper输出.
- reverse [1,2,3,4];
val it = [4,3,2,1] : int list
- reverse ["a" , "b" , "c" , "d" ];
val it = ["d","c","b","a"] : string list
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释为什么这个函数不适用于实数?
这是我尝试实时的输出...
- reverse [1.0, 2.0];
stdIn:1.2-53.9 Error: operator and operand don't agree [equality type required]
operator domain: ''Z list
operand: real list
in expression:
reverse (1.0 :: 2.0 :: nil)
Run Code Online (Sandbox Code Playgroud)