Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
62
Task/Logical-operations/Icon/logical-operations.icon
Normal file
62
Task/Logical-operations/Icon/logical-operations.icon
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
invocable all
|
||||
|
||||
procedure main() #: sample demonstrating boolean function use
|
||||
|
||||
limit := 4
|
||||
char2 := char(2)||char(0)
|
||||
every (i := char(1 to limit)|char2) do {
|
||||
write(iop := "bnot","( ",image(i)," ) = ",image(iop(i)))
|
||||
every k := 3 | 10 do {
|
||||
write("bistrue(",image(i),",",k,") - ", if bistrue(i,k) then "returns" else "fails")
|
||||
write("bisfalse(",image(i),",",k,") - ", if bisfalse(i,k) then "returns" else "fails")
|
||||
}
|
||||
every (j := char(1 to limit)) & (iop := "bor"|"band"|"bxor") do
|
||||
write(iop,"( ",image(i),", ",image(j)," ) = ",image(iop(i,j)))
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
procedure bisfalse(b,p) #: test if bit p (numbered right to left from 1) is false; return b or fails
|
||||
return boolean_testbit(0,b,p)
|
||||
end
|
||||
|
||||
procedure bistrue(b,p) #: test if bit p is true; return b or fails
|
||||
return boolean_testbit(1,b,p)
|
||||
end
|
||||
|
||||
procedure bnot(b) #: logical complement of b (not is a reserved word)
|
||||
static cs,sc
|
||||
initial sc := reverse(cs := string(&cset))
|
||||
if type(b) ~== "string" then runerr(103,b)
|
||||
return map(b,cs,sc) # en-mass inversion through remapping ordered cset
|
||||
end
|
||||
|
||||
procedure bor(b1,b2) #: logical or
|
||||
return boolean_op(ior,b1,b2)
|
||||
end
|
||||
|
||||
procedure band(b1,b2) #: logical or
|
||||
return boolean_op(iand,b1,b2)
|
||||
end
|
||||
|
||||
procedure bxor(b1,b2) #: logical or
|
||||
return boolean_op(ixor,b1,b2)
|
||||
end
|
||||
|
||||
procedure boolean_testbit(v,b,p) #: (internal) test if bit p is true/false; return b or fail
|
||||
if not 0 <= integer(p) = p then runerr(101,p)
|
||||
if type(b) ~== "string" then runerr(103,b)
|
||||
if v = ishift(ord(b[-p/8-1]), -(p%8)+1) then return b
|
||||
end
|
||||
|
||||
procedure boolean_op(iop,b1,b2) #: boolean helper
|
||||
local b3,i
|
||||
static z
|
||||
initial z := char(0)
|
||||
if type(b1) ~== "string" then runerr(103,b1)
|
||||
if type(b2) ~== "string" then runerr(103,b2)
|
||||
b3 := ""
|
||||
every i := -1 to -max(*b1,*b2) by -1 do
|
||||
b3 := char(iop(ord(b1[i]|z),ord(b2[i]|z))) || b3
|
||||
return b3
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue