gpt4 book ai didi

lisp - sbcl lisp 中没有发生逻辑操作

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:39 29 4
gpt4 key购买 nike

我想编写程序通过加法和移位法将两个数相乘。我用 sbcl lisp 编写了这段代码。

(defun calculator (num1 num2)
(write-line "In the function")
(let ((res 0))
(loop for lpr from 0 to 63
do (let ((end-bit (logand num2 1)))
(format t "res is : ~a. ~%" num2)
(if (= end-bit 1)
(+ res num1))
(ash num2 -1)
(ash num1 1)
(format t "after ash ~a ~%"num2)))
(format t "result is ~a.~%" res)))

(let ((num1 (progn
(write-line "Enter first number: ")
(finish-output)
(read)))
(num2 (progn
(write-line "Enter second number: ")
(finish-output)
(read))))
(if (or (= num1 0) (= num2 0))
(write-line "result is 0.0")
(calculator num1 num2)))

但是res、num2、num1、end-bit变量的值在整个程序中保持不变。我认为逻辑和位运算没有发生。问题出在哪里。

最佳答案

函数+ash 都不会就地 执行它们的操作,这意味着您必须将该结果设置回变量。

所以你想更新一个变量,这样做:

(setf num2 (ash num2 -1))

对于增量和减量,有一个名为 incf 的就地变体:

(incf res num1)  ; (setf res (+ res num1))

关于lisp - sbcl lisp 中没有发生逻辑操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682698/

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