寻找能让你改变真假的编程语言

问题描述 投票:0回答:8

出于好奇,我正在寻找一种动态的面向对象语言,它允许您将 true 更改为 false,反之亦然。

类似这样的:

true = false, false = true;

这也会影响任何条件语句,因此

42 == 42
应返回 False。 基本上,有了这个前提,语言中的任何内容对于程序员来说都是安全的。

有这样的语言吗?

programming-languages metaprogramming language-design language-features
8个回答
5
投票

Smalltalk 可以让您做到这一点。

Smalltalk-80 中的一切都是 可从内部进行修改 一个正在运行的程序。这意味着, 例如,IDE 可以更改为 无需重新启动即可运行的系统 它。在一些实施方式中, 语言的语法或垃圾 集合实现也可以 即时改变。就连声明 true 变为: false 有效于 Smalltalk,虽然执行它是 不建议。使用时 明智地,这种程度的灵活性 允许最短的之一 新代码输入所需时间 生产系统。

http://en.wikipedia.org/wiki/Smalltalk


2
投票

Python(显然是在版本 3 之前):

True = False
print True, False

>>False False

但是:

True = False
print 1==1, 1!=2, 2!=2

>>True True False

有关详细信息,请参阅例如:

  1. 为什么Python不能像我期望的那样处理真/假值?

  2. TRUE 是否始终具有非零值?


2
投票

您的问题有两种可能的答案。

一种可能:你可能还在使用 true 和 false,但你生活在异国他乡,你用不同的名字称呼它们。在这种情况下,这只是编译器/调试器环境显示的内容的问题 - 这可以通过修改编程工具来更改。 (或者,您可以从 LISP 开始,它缺少布尔原语。)

或者,也许你的意思是你希望它产生后果。例如,如果您希望不打印任何内容:

if (42==42) {
   print("This is true");
}

这样做的后果超出了我的想象,但如果你要重新定义条件原语(if、switch 等),你就可以做到。在基本的 LISP 中,通过创建这些条件的新版本可能是最简单的。看起来 Bryan 在谈论 Tcl 时讨论过这一点。


旁白:假设您创建了一种语言,其中 false 为 true,true 为 false,ifs 为 if nots,!=s 为 ==s,等等。也许如果你颠倒足够多的东西,你就会回到原来的语言。 :)


1
投票

C/C++ 允许您定义宏,所以 TRUE==FALSE 和 FALSE==TRUE 您还可以将 == 运算符重载为相当于 != (反之亦然)作为单独的步骤。


1
投票

更改表示 true 和 false 的文字/常量与更改布尔表达式的含义之间存在差异。第一个很简单,可以使用任一程序源轻松完成,例如在 C:

#define TRUE 0
#define FALSE 1

或编译器源代码。

但是改变布尔表达式在所有情况下的计算方式会不那么简单,但也不会太困难。不过,这将再次需要更改编译器或解释器源代码。


1
投票

Tcl 可能会做你想做的事。或许。您无法完全重新定义 true 和 false,因为 tcl 实际上没有 true 或 false 对象或值之类的东西,但您可以重新定义作用于表达式的所有命令以返回与通常情况相反的命令。例如,您可以重新定义“if”以返回与 if 核心定义相反的内容。

这是一个简单的、不完整的例子:

# keep the old if around
rename if ::_if

# make a new if with a negated condition
proc ::if {condition args} {
     set command [list _if !($condition) {*}$args]
     uplevel $command
}

交互式运行这个我得到:

% if true {puts true} else {puts false}
false
% if 1==1 {puts true} else {puts false}
false

(需要 tcl 8.5+)


0
投票

万一我想要这个,我只会重新定义 if,(或者使 IF 成为一个宏,然后使用它......)


0
投票

Swift 语言有一个很好的

toggle()
Bool 类型实例方法。

var myBool: Bool = true 
myBool.toggle

现在

myBool
是假的。

© www.soinside.com 2019 - 2024. All rights reserved.